4x4 크기의 격자판이 주어졌을 때, 만들 수 있는 서로 다른 일곱 자리 수들의 개수를 구하는 문제.
격자판의 임의의 위치에서 시작해서, 동서남북 네 방향으로 인접한 격자로 총 여섯 번 이동하면서, 각 칸에 적혀있는 숫자를 차례대로 이어 붙이면 7자리의 수가 된다.
만들 수 있는 서로 다른 7자리 숫자의 개수를 구하는 문제.
[코드]
def DFS(i, j, num, length):
if not (0 <= i < N and 0 <= j < N): # 0<= x <N 사이에 있지 않을때
return
if length == 0: # 7자리 수가 되면
com.add(num) # 조합 저장
return
DFS(i+1, j, num+A[i][j], length-1) # 아래로 이동
DFS(i, j+1, num+A[i][j], length-1) # 오른쪽으로 이동
DFS(i, j-1, num+A[i][j], length-1) # 왼쪽으로 이동
DFS(i-1, j, num+A[i][j], length-1) # 위로 이동
T = int(input()) # 테스트케이스 수 T
for test_case in range(1, T+1):
N = 4 # 4개의 격자판
A = [] # 수열 A
# 수열 입력받기
for i in range(4):
A.append(list(input().split()))
# 탐색 시작
com = set()
for i in range(4):
for j in range(4):
DFS(i, j, '', 7) # 가장 짧은 경로 계산
print("#%d %d" %(test_case, len(com)))
[문제풀이]
전형적인 DFS를 사용해 푸는 문제.

4x4 격자판 안에서 동서남북으로 이동하면서 7자리 수를 이어붙인다.
DFS(i+1, j, num+A[i][j], length-1) # 아래로 이동
DFS(i, j+1, num+A[i][j], length-1) # 오른쪽으로 이동
DFS(i, j-1, num+A[i][j], length-1) # 왼쪽으로 이동
DFS(i-1, j, num+A[i][j], length-1) # 위로 이동
그리고 이어붙인 개수가 7개가 되면 set()에 추가해 중복을 걸러내면 끝!
그 후 set의 개수를 구하면 그게 바로 4x4 격자판 안에서 만들 수 있는 서로 다른 7자리 숫자의 개수다.
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 3282. 0/1 Knapsack (0) | 2024.11.10 |
|---|---|
| [Python, 파이썬] SWEA 1493. 수의 새로운 연산 (1) | 2024.10.22 |
| [Python, 파이썬] SWEA 6190. 정곤이의 단조 증가하는 수 (0) | 2024.10.22 |
| [Python, 파이썬] SWEA 6808. 규영이와 인영이의 카드게임 (3) | 2024.10.22 |
| [Python, 파이썬] SWEA 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 (0) | 2024.10.22 |