For Programmer
SWEA 1947 파이썬 문제풀이(스도쿠 검증) 본문
728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
간단한 구현문제이다. 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