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))
이 분 정말 깔끔하게 풀이하셨다.. 참고