요소 확인할 때 시간복잡도를 위해 set화 권장
문제설명
빙고 게임 보드에 적힌 숫자가 담겨있는 배열 board, 게임 보드에서 순서대로 지운 숫자가 들어있는 배열 nums가 매개변수로 주어질 때, board에서 nums에 들어있는 숫자를 모두 지우면 몇 개의 빙고가 만들어지는지 return하도록 solution함수를 완성해주세요.
입출력 예
board nums result
[[11,13,15,16], [14,3,2,4,13,1,16,11,5,15] 3
[12,1,4,3],
[10,2,7,8],
[5,14,6,9]]
솔루션
1) 각 행, 각 열, 오른쪽 대각선, 왼쪽 대각선 배열을 만든다.
2) 숫자가 불러지면 해당 행, 열 대각선의 숫자를 1 올려준다
3) 보드길이와 같다면 빙고 줄이 완성 되었다는 뜻이다.
코드
# 파이썬
def solution(board, nums):
answer, n, nums = 0, len(board), set(nums)
row, col, diag = [0] * n, [0] * n, [0] * 2
for i in range(n):
for j in range(n):
if board[i][j] in nums:
row[i] += 1
col[j] += 1
if i == j:
diag[0] += 1
if i+j == n-1:
diag[1] += 1
return [*row, *col, *diag].count(n)
팁 / 주의
nums를 셋화 시켜서 in을 사용해야 O(n)이 걸려 시간이 줄어든다.
*는 스프레드 연산자와 비슷한 역할,
대각선은 i=j일 때(왼쪽위에서 오른쪽아래), i+j == n-1일 때(왼쪽아래에서 오른쪽위) 두가지 경우가 있다.