Today, I will

[완전탐색, SWEA] 스도쿠 검증 본문

Computer Science/알고리즘

[완전탐색, SWEA] 스도쿠 검증

Lv.Forest 2023. 12. 22. 22:10

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Psz16AYEDFAUq

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

스도크룰을 몰라 파리퇴치처럼 3*3 정사각형이 모든 col과 row를 도는 줄 알았는데, 반드시 3칸씩 뛰면서 돌아야 했던 문제

전체 코드

# 10
# 7 3 6 4 2 9 5 8 1
# 5 8 9 1 6 7 3 2 4
# 2 1 4 5 8 3 6 9 7
# 8 4 7 9 3 6 1 5 2
# 1 5 3 8 4 2 9 7 6
# 9 6 2 7 5 1 8 4 3
# 4 2 1 3 9 8 7 6 5
# 3 9 5 6 7 4 2 1 8
# 6 7 8 2 1 5 4 3 9
T = int(input())
for t in range(1, T+1):
    arr = [list(map(int, input().split())) for i in range(9)]
    ans = 1
    for r in range(9):
        temp_arr = []
        temp_col_arr = []
        for c in range(9):
            if arr[r][c] in temp_arr:
               ans = 0
            else:
                temp_arr.append(arr[r][c])
            if arr[c][r] in temp_col_arr:
               ans = 0
            else:
                temp_col_arr.append(arr[c][r])
    if ans == 1:
        for start_row in range(0, 9-3+1, 3):
            for start_col in range(0, 9-3+1, 3):
                nbyn_temp_arr = []
                for row in range(start_row, start_row + 3):
                    for col in range(start_col, start_col + 3):
                        if arr[row][col] in nbyn_temp_arr:
                            ans = 0
                        else:
                            nbyn_temp_arr.append(arr[row][col])
    print(f'#{t} {ans}')

 

 3 by 3 씩 돌아야 한다는 걸 알고 나서도 외곽 이중 포문만 3 steps 건너뛰도록 해야하는데 안쪽 포문까지 steps 뛰게 해서 fail을 봤었다.

 

정답코드 포인트

 

오답 코드 포인트

기준 row와 기준 col에서만 3번씩 뛰어주면 되는데 굳이 안쪽 for문의 row와 col도 3번씩 뛰다가 오답 처리 맞았음