본문 바로가기

Python/code problem

[sw expert academy] 1974. 스도쿠 검증

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

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

swexpertacademy.com

이 문제는 3번의 실패 끝에 성공했다.

이것도 모범답안 없이 혼자 풀었다.

 

sum을 이용해 합이 45가 되는지 안 되는지로 풀고 싶었지만 예외가 있을 것 같아 하나하나 확인해보는 방법으로 했다.

댓글을 보니 어떤 분께서 합은 45가 되지만 문제 조건에 맞지 않는 예시를 찾으셨다.

그것도 진짜 쉬운 일 아닌데.. 대단하시다는 생각이 든다.

 

내 코드는 다음과 같다.

  • 56,924kb메모리
  • 137ms실행시간
T = int(input())
for t in range(1,T+1):
    bool_lst_wd = []
    bool_lst_lg = []
    bool_lst_sq = []

    sdk = []
    for i in range(9):
        sdk.append(list(map(int,input().split())))

    for i in range(9):
        if set(sdk[i]) == {1,2,3,4,5,6,7,8,9}:
            bool_lst_wd.append(True)
        else:
            bool_lst_wd.append(False)


    lengt = []
    for i in range(9):
        lengt.append({sdk[j][i] for j in range(9)})

    for i in range(9):
        if set(lengt[i]) == {1,2,3,4,5,6,7,8,9}:
            bool_lst_lg.append(True)
        else:
            bool_lst_lg.append(False)
    

    sq = [[] for a in range(9)]
    for l in range(0,3):
        for k in range(0,3): #가로로 한 뭉텅이
            for i in range(3*l,3*(l+1)): #세로
                for j in range(3*k,3*(k+1)): #가로
                    sq[3*l+k].append(sdk[i][j])

    for i in range(9):
        if set(sq[i]) == {1,2,3,4,5,6,7,8,9}:
            bool_lst_sq.append(True)
        else:
            bool_lst_sq.append(False)


    if bool_lst_lg== [True for i in range(9)] \
        and bool_lst_wd == [True for i in range(9)] \
            and bool_lst_sq == [True for i in range(9)]:
        print("#{} 1".format(t))
    else:
        print("#{} 0".format(t))

 


이 문제는 연산이 정말 복잡하다.

정사각형으로 쪼갤 때 그 리스트를 만드는 과정에서 생각을 좀 해야 한다.

for문 4개의 중첩은 정말 헷갈렸다.