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')
'SWEA' 카테고리의 다른 글
[SWEA] 4866 괄호검사 - python (0) | 2023.02.18 |
---|---|
[SWEA] 4871 그래프 경로 -python (0) | 2023.02.14 |
[SWEA] 1215 [S/W 문제해결 기본] 3일차 - 회문1 -python (0) | 2023.02.13 |
[SWEA] 3144 가장 빠른 문자열 타이핑 - python (0) | 2023.02.13 |
[SWEA] 1979 어디에 단어가 들어갈 수 있을까 - python (0) | 2023.02.13 |