For Programmer
SWEA 1947 파이썬 문제풀이(스도쿠 검증) 본문
728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq
간단한 구현문제이다. 2가지를 나눠서(3x3 구하는 부분, 가로 세로줄 구하는 부분) 반복문을 짜도 되고 한번의 반복문안에 위의 경우를 다 구할 수 있다.
1. 2가지를 나눠서 구하는 경우
T = int(input())
def solution(order):
# 작은 사각형 3 x 3 검사
for i in range(0, 9, 3):
for j in range(0, 9, 3):
check_square = set()
for k in range(i, i + 3):
for h in range(j, j + 3):
check_square.add(array[k][h])
if len(check_square) != 9:
print(f'#{order} {0}')
return
# 전체 가로줄,세로줄 검사
for i in range(9):
check_list_r = set()
check_list_c = set()
for j in range(9):
check_list_r.add(array[i][j])
check_list_c.add(array[j][i])
if len(check_list_r) != 9 or len(check_list_c) != 9:
print(f'#{order} {0}')
return
# 만약 위에서 return 되지 않았다면 숫자가 겹치지 않는다는 말
print(f'#{order} {1}')
for order in range(1, T + 1):
array = [list(map(int, input().split())) for _ in range(9)]
solution(order)
2. 한번의 반복문 안에서 모두 구하는 경우
T = int(input())
def solution(order):
check_list_r = [set() for _ in range(9)]
check_list_c = [set() for _ in range(9)]
for i in range(0, 9, 3):
for j in range(0, 9, 3):
check_square = set()
for k in range(i, i + 3):
for h in range(j, j + 3):
for g in range(9):
if k == g:
check_list_c[g].add(array[k][h])
if h == g:
check_list_r[g].add(array[k][h])
check_square.add(array[k][h])
if len(check_square) != 9:
print(f'#{order} {0}')
return
for i in check_list_r:
if len(i) != 9:
print(f'#{order} {0}')
return
for j in check_list_c:
if len(j) != 9:
print(f'#{order} {0}')
return
print(f'#{order} {1}')
for order in range(1, T + 1):
array = [list(map(int, input().split())) for _ in range(9)]
solution(order)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
SWEA 4466 파이썬 문제풀이(최대 성적표 만들기) (0) | 2022.02.08 |
---|---|
SWEA 1961 파이썬 문제풀이(숫자 배열 회전) (0) | 2022.02.08 |
SWEA 1258 파이썬 문제풀이(행렬찾기) (0) | 2022.02.07 |
SWEA 1220 파이썬 문제풀이(Magnetic) (0) | 2022.02.06 |
SWEA 1211 파이썬 문제풀이(Laddar2) (0) | 2022.02.06 |
Comments