문제
N x N 보드판에서 빙고를 하자.
주어지는 수를 모두 지운 후 몇 빙고인지 구하라.
N 은 2이상 500이하의 자연수
board의 각 칸에는 1이상 NxN 이하의 자연수가 중복없이 들어 있다.
nums는 지울 숫자가 들어있는 배열이며, 길이는 1이상 NxN 이하이다.
nums에 들어 있는 숫자는 1이상 NxN이하의 자연수이며, 중복은 없다.
입출력 예시
board | nums | result |
---|---|---|
[[11,13,15,16],[12,1,4,3],[10,2,7,8],[5,14,6,9]] | [14,3,2,4,13,1,16,11,5,15] | 3 |
접근
빙고판에서 우선 주어지는 수들을 제거하자.
빙고 계산을 위해 지워진 칸은 0으로 만들어준다.
그 후 보드를 순회하며 가로, 세로, 대각선의 합을 구해 빙고여부를 판단한다.
코드
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def solution(board, nums):
dic = {board[i][j] : [i,j] for i in range(len(board))
for j in range(len(board))}
for num in nums:
i, j = dic[num]
board[i][j] = 0
inDiagonal = 0
deDiagonal = 0
answer = 0
for i in range(len(board)):
width = 0
height = 0
for j in range(len(board)):
width += board[i][j]
height += board[j][i]
if i == j:
inDiagonal += board[i][j]
if j == len(board) - i - 1:
deDiagonal += board[i][j]
if width == 0:
answer += 1
if height == 0:
answer += 1
if inDiagonal == 0:
answer += 1
if deDiagonal == 0:
answer += 1
return answer