코딩테스트/SW Expert Academy

SWEA(D2) 1974. 스도쿠 검증 Python

1son 2023. 10. 19. 08:08

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5Psz16AYEDFAUq&categoryId=AV5Psz16AYEDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=2

 

SW Expert Academy

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

swexpertacademy.com

 

 

* 내 코드

t=int(input())
for tc in range(1,t+1):
    result=1
    arr=[0]*9
    data=[list(map(int,input().split())) for _ in range(9)]
    #가로
    for i in range(9):
        arr=[]
        for j in range(9):
            if arr.count(data[i][j])>0:
                result=0
                break
            else:
                arr+=data[i][j]
    #세로
    for i in range(9):
        arr=[]
        for j in range(9):
            if arr.count(data[j][i])>0:
                result=0
                break
            else:
                arr+=data[j][i]
    #격자
    for i in range(9):
        arr=[]
        for j in range(i,i+3,1):
            for k in range(i,i+3,1):
                if arr.count(data[i][j])>0:
                    result = 0
                    break
                else:
                    arr+=data[j][k]

    print(f'{tc} {result}')

*에러 발생 -1 

더보기

arr+=data[i][j]
TypeError: 'int' object is not iterable

* 그렇다. arr는 append()를 이용해서 추가해준다. 


*에러 발생 -2

#격자
    for i in range(9):
        arr=[]
        for j in range(i,i+3,1):
            for k in range(i,i+3,1):
                if arr.count(data[i][j])>0:
                    result = 0
                    break
                else:
                    arr+=data[j][k]
    for i in range(0, 9, 3):  # 격자의 시작 행 인덱스
        for j in range(0, 9, 3):  # 격자의 시작 열 인덱스
            arr = []
            for x in range(3):  # 격자 내에서 행 순회
                for y in range(3):  # 격자 내에서 열 순회
                    if arr.count(data[i + x][j + y]) > 0:
                        result = 0
                        break
                    else:
                        arr.append(data[i + x][j + y])

격자는 이렇게 처리한다.

 

* 정답 코드

t=int(input())
for tc in range(1,t+1):
    result=1
    arr=[]
    data=[list(map(int,input().split())) for _ in range(9)]
    #가로
    for i in range(9):
        arr=[]
        for j in range(9):
            if arr.count(data[i][j])>0:
                result=0
                break
            else:
                arr.append(data[i][j])
    #세로
    for i in range(9):
        arr=[]
        for j in range(9):
            if arr.count(data[j][i])>0:
                result=0
                break
            else:
                arr.append(data[j][i])
    #격자
    for i in range(0, 9, 3):  # 격자의 시작 행 인덱스
        for j in range(0, 9, 3):  # 격자의 시작 열 인덱스
            arr = []
            for x in range(3):  # 격자 내에서 행 순회
                for y in range(3):  # 격자 내에서 열 순회
                    if arr.count(data[i + x][j + y]) > 0:
                        result = 0
                        break
                    else:
                        arr.append(data[i + x][j + y])

    print(f'#{tc} {result}')