문제
스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9 개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자.
| 1 | 4 | 3 | 6 | 2 | 8 | 5 | 7 | 9 |
| 5 | 7 | 2 | 1 | 3 | 9 | 4 | 6 | 8 |
| 9 | 8 | 6 | 7 | 5 | 4 | 2 | 3 | 1 |
| 3 | 9 | 1 | 5 | 4 | 2 | 7 | 8 | 6 |
| 4 | 6 | 8 | 9 | 1 | 7 | 3 | 5 | 2 |
| 7 | 2 | 5 | 8 | 6 | 3 | 9 | 1 | 4 |
| 2 | 3 | 7 | 4 | 8 | 1 | 6 | 9 | 5 |
| 6 | 1 | 9 | 2 | 7 | 5 | 8 | 4 | 3 |
| 8 | 5 | 4 | 3 | 9 | 6 | 1 | 2 | 7 |
위 그림은 스도쿠를 정확하게 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색 깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다.
완성된 9×9 크기의 수도쿠가 주어지면 정확하게 풀었으면 “YES", 잘 못 풀었으면 ”NO"를 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 완성된 9×9 스도쿠가 주어집니다.
| 1 4 3 6 2 8 5 7 9 5 7 2 1 3 9 4 6 8 9 8 6 7 5 4 2 3 1 3 9 1 5 4 2 7 8 6 4 6 8 9 1 7 3 5 2 7 2 5 8 6 3 9 1 4 2 3 7 4 8 1 6 9 5 6 1 9 2 7 5 8 4 3 8 5 4 3 9 6 1 2 7 |
출력
첫째 줄에 “YES" 또는 ”NO"를 출력하세요.
| YES |
답
li = [list(map(int, input().split())) for _ in range(9)]
for i in range(9):
li_row = []
li_column = []
for j in range(9):
li_row.append(li[i][j])
li_column.append(li[j][i])
if len(set(li_row)) < 9 or len(set(li_column)) < 9:
print("NO")
break
else:
for i in range(0, 9, 3):
if len(set(list(li[i][:3] + li[i + 1][:3] + li[i + 2][:3]))) < 9:
print("NO")
break
if len(set(list(li[i][3:6] + li[i + 1][3:6] + li[i + 2][3:6]))) < 9:
print("NO")
break
if len(set(list(li[i][:6] + li[i + 1][:6] + li[i + 2][:6]))) < 9:
print("NO")
break
else:
print("YES")
📄 다른 풀이
def check(li):
for i in range(9):
li_row = [0] * 10
li_column = [0] * 10
for j in range(9):
li_row[li[i][j]] = 1
li_column[li[j][i]] = 1
if sum(li_row) != 9 or sum(li_column) != 9:
return False
for i in range(3):
for j in range(3):
li_s = [0] * 10
for k in range(3):
for s in range(3):
li_s[li[i * 3 + k][j * 3 + s]] = 1
if sum(li_s) != 9:
return False
return True
li = [list(map(int, input().split())) for _ in range(9)]
if check(li):
print("YES")
else:
print("NO")'Python > 알고리즘' 카테고리의 다른 글
| [Python/알고리즘] 이분 검색 (0) | 2022.10.31 |
|---|---|
| [Python/알고리즘] 격자판 회문수 (0) | 2022.10.27 |
| [Python/알고리즘] 봉우리 (0) | 2022.10.27 |
| [Python/알고리즘] 곳감 (0) | 2022.10.27 |
| [Python/알고리즘] 사과나무 (0) | 2022.10.25 |
댓글