[프로그래머스] 빙고 python

Rapsby·2020년 12월 5일
0

코딩

목록 보기
25/29

문제 설명
빙고는 NxN 크기의 게임 보드 칸에 1부터 NxN까지의 자연수를 중복 없이 하나씩 적은 후 숫자를 하나씩 지워나가는 게임입니다. 이때, 가로, 세로, 대각선 방향으로 한 줄에 적힌 숫자를 모두 지울 경우 빙고를 1개 만들었다고 합니다.
다음은 4X4 크기의 게임 보드를 이용해 게임을 진행한 예시입니다.

위와 같이 각 칸에 숫자가 적혀 있을 때, 위 게임 보드에서 순서대로 지운 숫자가 [14,3,2,4,13,1,16,11,5,15]인 경우 아래와 같이 빙고 3개가 만들어집니다.

빙고 게임 보드에 적힌 숫자가 담겨있는 배열 board, 게임 보드에서 순서대로 지운 숫자가 들어있는 배열 nums가 매개변수로 주어질 때, board에서 nums에 들어있는 숫자를 모두 지우면 몇 개의 빙고가 만들어지는지 return하도록 solution함수를 완성해주세요.

제한사항
board는 게임 보드 칸에 적힌 숫자를 뜻하는 NxN크기의 2차원 배열이며, N은 2 이상 500이하의 자연수입니다.
board의 각 칸에는 1 이상 NxN이하의 자연수가 중복 없이 하나씩 들어있습니다.
nums는 board에서 지울 숫자가 들어있는 배열이며, 길이는 1 이상 NxN이하입니다.
nums에 들어있는 숫자는 1 이상 NxN이하의 자연수이며, 중복된 수가 들어있지 않습니다.


  1. 이중 반복문으로 board를 확인한다.
  2. 빙고를 체크하기 위한 n by 1 리스트에 저장한다.
    (따로 board에 체크하여 빙고를 확인하려면 n * n * 2 (가로+세로) 만큼 반복해야 한다.)
  3. 라인별로 저장된 값이 n이면 카운트를 하여 반환한다.
def solution(board, nums):
    n = len(board)
    nums = dict.fromkeys(nums)
    row_list = [0] * n
    col_list = [0] * n
    line1 = 0
    line2 = 0
    for i in range(n):
        for j in range(n):
            if board[i][j] in nums:
                board[i][j] = 0
                row_list[i] += 1
                col_list[j] += 1
                if i == j:
                    line1 += 1
                if n - 1 - i == j:
                    line2 += 1
    answer = line1//n + line2//n
    answer += sum([1 for i in row_list if i == n])
    answer += sum([1 for i in col_list if i == n])
    return answer
profile
Good Morning

0개의 댓글