728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
스도쿠는 숫자퍼즐로, 가로 9칸 세로 9칸으로 이루어져 있는 표에 1 부터 9 까지의 숫자를 채워넣는 퍼즐이다.
![](https://blog.kakaocdn.net/dn/bEuEKv/btrtO8POLtD/veJRvsJAceCa5iao3wphw0/img.png)
같은 줄에 1 에서 9 까지의 숫자를 한번씩만 넣고, 3 x 3 크기의 작은 격자 또한, 1 에서 9 까지의 숫자가 겹치지 않아야
한다
![](https://blog.kakaocdn.net/dn/PgVlw/btrtKDcccRA/tKE5IhXhG0luvHP4jJ0e2K/img.png)
입력으로 9 X 9 크기의 스도쿠 퍼즐의 숫자들이 주어졌을 때, 위와 같이 겹치는 숫자가 없을 경우, 1을 정답으로 출력하
고 그렇지 않을 경우 0 을 출력한다.
< ❓ 생각 >
< 💻 코드 >
def sudoku(arr):
for i in range(9):
# 숫자에 해당하는 idx에 1 추가
# 요소에 숫자가 2이상인 것이 있으면 스도쿠 X
# 가로 검사
lst_h = [0] * 10
# 세로 검사
lst_v = [0]*10
for j in range(9):
# 가로검사
lst_h[arr[i][j]] += 1
if lst_h[arr[i][j]] == 2:
return 0
# 세로 검사
lst_v[arr[j][i]] += 1
if lst_v[arr[j][i]] == 2:
return 0
# 3*3 검사
# x,y 3*3스도쿠 검사의 시작점
for x in range(0,9,3):
for y in range(0,9,3):
# 3*3 검사
lst_3 = [0] * 10
for i in range(3):
for j in range(3):
lst_3[arr[x+i][y+j]] += 1
if lst_3[arr[x+i][y+j]] == 2:
return 0
return 1
# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
arr = [list(map(int,input().split())) for _ in range(9)]
result = sudoku(arr)
print(f'#{tc} {result}')
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 1961. 숫자 배열 회전 - Python (0) | 2022.02.21 |
---|---|
[SWEA] 1859. 백만 장자 프로젝트 - Python (0) | 2022.02.20 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 - Python (0) | 2022.02.20 |
[SWEA] 2001. 파리 퇴치 - Python (0) | 2022.02.20 |
[SWEA] 5356. 의석이의 세로로 말해요 - Python (0) | 2022.02.20 |
댓글