작성
·
181
1
안녕하세요! 강의 따라가면서 실력이 늘고있는게 느껴저 기분이 좋은 학생입니다 :)
아래는 리스트/인덱스를 활용한 방법보다 조금 더 간단한 로직으로 동작 할 수 있을까 궁금하여 작성해본 코드인데요,
set이라는 자료구조의 중복제거 성질을 활용하여 가로세로(check_lines함수) 및 3x3 사각형(check_rect함수)를 작성해보았습니다.
샘플 테스트케이스는 모두 통과했는데, 예외케이스가 존재할까 조마조마한 마음에 평가 요청드리고자 질문 드립니다.
grid = [list(map(int, input().split())) for _ in range(9)]
def check_lines(i, j):
if len(set(grid[i])) != 9 or len(set(grid[:][j])) != 9:
return False
else:
return True
def check_rect(i, j):
val = []
i //= 3
j //= 3
for x in range(i * 3, (i + 1) * 3):
for y in range(j * 3, (j + 1) * 3):
val.append(grid[x][y])
if len(set(val)) != 9:
return False
else:
return True
flag = True
for i in range(9):
if flag:
for j in range(9):
if flag:
if not (check_lines(i, j) and check_rect(i, j)):
flag = False
else:
break
else:
break
if flag:
print("YES")
else:
print("NO")