로직
-
딕셔너리를 사용해서 { num : board상의 idx } 정보들을 다 저장
-
N 사이즈의 rows, cols 리스트를 만들어서 각 행과 열에 몇 개의 num이 등장했는지 카운트
-
대각선은
-
(1) 현재 위치한 행 == 열 인 경우 카운트 --- [왼쪽 위에서 오른쪽 아래로 향하는 대각선]
-
(2) 현재 위치한 행 + 열 + 1 == N 인 경우 카운트 --- [반대 대각선]
-
-
rows와 cols는 순회하면서 카운트가 N일시 빙고 +1, diag_RL와 diag_LR은 값이 N일시에 빙고 +1
코드
def solution(board, nums):
answer = 0
N = len(board)
num_location = {}
rows, cols, diag_LR, diag_RL = [0]*N, [0]*N, 0, 0
idx = 0
# 1. num_location에 data와 data의 index 정보를 저장
# O(N*N)
for x in range(N):
for y in range(N):
data = board[x][y]
num_location.setdefault(data, idx)
idx+=1
# 2. 각 row, column에 몇 개의 숫자가 지워졌는지 카운트
# 두 개의 diagonal도 마찬가지로 column을 기준으로 잡았을 때,
# 2-1. r == c 인 num이 있으면 카운트
# 2-2. r + c == N-1 인 num이 있으면 카운트
# O(N)
for num in nums:
idx = num_location[num]
# row, col 확인
r, c = (idx//N) , idx%N
rows[r] +=1
cols[c] +=1
# diagonal 확인
if r == c: diag_LR += 1
if r + c == N-1: diag_RL += 1
# rows, columns은 N번 카운트 된 부분이 있으면 빙고 +1
# diagonal은 N일 경우 빙고+1
for r in rows:
if r == N: answer +=1
for c in cols:
if c == N: answer +=1
if diag_LR == N: answer +=1
if diag_RL == N: answer +=1
return answer
'코테 준비' 카테고리의 다른 글
[프로그래머스] 카펫 (0) | 2020.09.20 |
---|---|
[프로그래머스] 세 소수의 합 (0) | 2020.09.18 |
[카카오 2020 코테 #1] 문자열 압축 - python (0) | 2020.09.10 |
[프로그래머스 - heap] 더 맵게 (0) | 2020.09.07 |
[프로그래머스 - BFS] FloodFill (0) | 2020.09.05 |