빙고 (python)

SeoYng·2020년 9월 5일
0

요소 확인할 때 시간복잡도를 위해 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일 때(왼쪽아래에서 오른쪽위) 두가지 경우가 있다.

profile
Junior Web FE Developer

0개의 댓글