CodingTest/SW Expert Academy

[ SW Expert Academy ] 1974. 스도쿠 검증

EEOOOO 2022. 11. 15. 11:15

1차 제출 [ 9 / 10 ] Fail

아ㅏㅇ아ㅏ아아아..  제발 ,.  ㅠㅜㅠㅜㅠ

하나 틀린 거 뭔데 ... ㅠㅠㅜㅠ

T = int(input())
for tc in range(1, T+1):
    board = [list(map(int, input().split())) for _ in range(9)]
    answer = 1
    col = [list() for _ in range(9)]
    sdokuPossible = True
    for i in range(9):
        if len(set(board[i])) != 9:
            sdokuPossible = False
            break
        for j in range(9):
            col[j].append(board[i][j])

    for j in range(9):
        if len(set(col[j])) != 9:
            sdokuPossible = False
            break

    if not sdokuPossible:
        answer = 0

    print('#{} {}'.format(tc,answer))

 

아.. 뭔가 짐작이 된다.

조건 하나를 체크 안 했다.

가로 줄, 세로 줄뿐만이 아니라 3*3박스에서도 겹치는 게 없는지 확인하는 부분을 빼먹었다.

아니 초딩 때 스도쿠 덕후였는데.. 어쩌다 이런 실수를 ..? 스스로 괜히 실망스러웠다 ㅋㅋ

 

응 .. 맞았다. 그 마지막 테케 하나.

해당 부분을 만들어주기 위해 배열을 하나 더 썼다. 3*3블록은 따로 저장하는 three_three배열

 

2차 제출 [ 10 / 10 ] PASS.

근데 코드가 꽤 더럽다.. 문제 맞추는거에 급급해서 와다다 작성했는데 좀 정리해야겠다.

T = int(input())
for tc in range(1, T+1):
    board = [list(map(int, input().split())) for _ in range(9)]
    answer = 1
    col = [list() for _ in range(9)]
    sdokuPossible = True
    three_three = [[[] for _ in range(3)] for _ in range(3)]

    for i in range(9):
        if len(set(board[i])) != 9:
            sdokuPossible = False
            break
        cnt = 0
        for j in range(9):
            col[j].append(board[i][j])

            three_three[i//3][j//3].append(board[i][j])

    for j in range(9):
        if len(set(col[j])) != 9:
            sdokuPossible = False
            break
    for three in three_three:
        for t in three:
            if len(set(t)) != 9:
                sdokuPossible = False
                break
    if not sdokuPossible:
        answer = 0

    print('#{} {}'.format(tc,answer))

 

 

이 분 정말 깔끔하게 풀이하셨다.. 참고