SWEA

[SWEA] 1974 스도쿠 검증 -python

peach_h 2023. 2. 13. 21:39

SW Expert Academy

 

SW Expert Academy

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

swexpertacademy.com

다시 만난 스도쿠 !!!

나는 함수를 최대한 안쓰고 풀고 싶었다.

가로 세로 까지는 함수 안쓰고 할 수 있었는데,

3*3은 도저히 append 안쓰고 어케할지 모르겠는.

 

빈 리스트를 하나 준비한 후, 숫자가 들어오면 그 숫자에 해당하는 인덱스에 추가

9개가 다들어왔는데, 1~9까지 준비해놓은 sdo 리스트랑 불일치 하면 스도쿠 실패로 판별했다.

이것을 3*3 리스트를 append 없이 만들 능력이 부족해서 !! 

3*3은 그냥 함수에 굴복하고 말았다.

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    arr = [list(map(int,input().split()))for _ in range(9)]
    arr_t = [[0]*9for _ in range(9)]
    sdo = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    non = non_t = [0]*9
    ans = 0
    # 가로 -> 세로 돌리기
    for i in range(9):
        for j in range(9):
            arr_t[i][j] = arr[j][i]

    # 중복거르기
    for i in range(9):
        # 가로
        for num in arr[i]:
            if num not in non:
                non[num-1] = num
        # 세로
        for num in arr_t[i]:
            if num not in non:
                non_t[num-1] = num

        if non != sdo or non_t != sdo:
            ans += 1

    # 3*3
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            mini = arr[i][j:j + 3] + arr[i + 1][j:j + 3] + arr[i + 2][j:j + 3]
            if len(set(mini)) != 9:
                ans += 1

    if ans == 0:
        print(f'#{test_case} 1')
    else:
        print(f'#{test_case} 0')

 

함수에 굴복하면 코드가 이렇게 짧아진다

하지만 코테에 어떤 제약조건이 걸려있을지 모르니 함수는 최대한 멀리해보자 . .

 

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    arr = [list(map(int,input().split()))for _ in range(9)]
    arr_t = [[0]*9for _ in range(9)]
    ans = 0
    # 가로 -> 세로 돌리기
    for i in range(9):
        for j in range(9):
            arr_t[i][j] = arr[j][i]
    # 3*3
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            mini = arr[i][j:j + 3] + arr[i + 1][j:j + 3] + arr[i + 2][j:j + 3]
            if len(set(mini)) != 9:
                ans += 1
                break
    # 가로 / 세로
    for i in range(9):
        if len(set(arr[i])) != 9 or len(set(arr_t[i])) != 9 :
            ans += 1
            break
    # 중복된 수가 있으면 ans != 0
    if ans == 0 :
        print(f'#{test_case} 1')
    else:
        print(f'#{test_case} 0')