SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
T = int(input())
for t in range(1, T + 1):
sudoku = [list(map(int, input().split())) for _ in range(9)]
chk = 1
# 행
for i in range(9):
num = []
for j in range(9):
if num:
if sudoku[i][j] in num:
chk = 0
break
num.append(sudoku[i][j])
# 열
for i in range(9):
num = []
for j in range(9):
if num:
if sudoku[j][i] in num:
chk = 0
break
num.append(sudoku[j][i])
# 3 x 3
for i in range(0, 9, 3):
for j in range(0, 9, 3):
num = [] # 아래의 중첩 for문에서 검사하기 때문에 이 위치에서 초기화
for k in range(3):
for r in range(3):
if num:
if sudoku[i + k][j + r] in num:
chk = 0
break
num.append(sudoku[i + k][j + r])
print('#%d %d' % (t, chk))
- 행, 열, 3x3 구간 전체를 검사해주어야 합니다.
- 각 범위 내에서 1~9까지의 수가 중복된다면 0이 출력될 수 있도록 chk를 0으로 설정한 후 break를 통해 빠져나옵니다.
- 아닌 경우는 chk가 1인 상태로 출력됩니다.
- 이 중에서 3 x 3을 검사하는 경우는 0,0 ~ 2,2를 거쳐 0,3 ~ 2,5 → 0,6 ~ 2,8 순으로 가로방향 탐색을 실시합니다. 그래서 바깥쪽 2개의 for문은 0부터 9까지 3개씩 증가하도록 만들었습니다.
피드백은 언제나 환영합니다.
'알고리즘 > SWEA' 카테고리의 다른 글
[Python] SWEA D2 1976번 - 시각 덧셈 (0) | 2022.08.21 |
---|---|
[Python] SWEA D2 2001번 - 파리 퇴치 (0) | 2022.08.21 |
[Python] SWEA D2 1966번 - 숫자를 정렬하자 (0) | 2022.06.02 |
[Python] SWEA D2 1961번 - 숫자 배열 회전 (0) | 2022.06.02 |
[Python] SWEA D2 1948번 - 날짜 계산기 (0) | 2022.06.02 |