프로그래머스__[문제풀이: lv3. 빙고]

Jaewon Lee·2021년 8월 10일
0

Algorithm

목록 보기
27/36
post-thumbnail

On.


Algorithm


1. 수도코드

1) nums의 원소를 key로 defaultdict 생성

2) 가로, 세로, 대각선 두개를 나타내는 빙고 딕셔너리 생성

3) board를 순회 (이중 for문)

  • 첫번째 for문에서 두 대각선 bingo가 있는지 확인
  • 있으면 bingo['diagonal'][0]과 [1]에 각각 1을 추가하여 카운트한다.
  • 두번째 for문에서 board[행][열]이 빙고 숫자이면, 빙고 딕셔너리에서 행과 열을 나타내는 리스트에 1을 추가하여 카운트한다.
  • 이때 board[행][열]은 1번에서 생성한 defaultdict로 빙고 숫자인지 확인해야 시간 복잡도를 낮출 수 있다.

4) 이중 for문이 끝나면 bingo.items() 순회 (for문)

5) 가로, 세로, 대각선 2개의 원소를 순회(for문)

6) 5번의 원소가 board의 길이와 같으면 answer += 1

7) 4번, 5번의 이중 for문이 끝나면 answer 리턴


2. 구현코드

from collections import defaultdict

def solution(board, nums):
    N = len(board)
    dic = defaultdict(int)
    bingo = {'row': [[] for _ in range(N)], 'col': [[] for _ in range(N)], 'diagonal': [[], []]}
    answer = 0
    
    for num in nums:
        dic[num] += 1
        
    for row in range(N):
        if dic[board[row][row]]:
            bingo['diagonal'][0].append(1)
        if dic[board[row][N - 1 - row]]:
            bingo['diagonal'][1].append(1)
        for col in range(N):
            if dic[board[row][col]]:
                bingo['row'][row].append(1)
                bingo['col'][col].append(1)
                
    else:
        for _, val in bingo.items():
            for cnt in val:
                if len(cnt) == N:
                    answer += 1

    return answer
            


Off.


프론트와 백을 넘나드는 리드 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

0개의 댓글