본문 바로가기
DC 2

[자료구조] 빙고 파이썬 (hash,list comprehension)

by YGSEO 2021. 4. 26.
728x90
def solution(board, nums):
    n = len(board) # board의 길이
    nums = dict.fromkeys(nums, True) # nums 리스트 값을 키로 변환하여 dict로 만들어준다,
    
    # nums = {14: True, 3: True, ... , 5: True, 15: True}
    row_list = [0] * n
    col_list = [0] * n
    left_diagonal = 0
    right_diagonal = 0

    for i in range(n): # O(n)
        for j in range(n): # O(n)
            if board[i][j] in nums: # O(1)
                board[i][j] = 0 # make it checked
                row_list[i] += 1
                col_list[j] += 1

                if i == j:
                    left_diagonal += 1
                if n - 1 - i == j:
                    right_diagonal += 1

    answer = 0

    # row_list : 각 row의 checked 개수
    answer += sum([1 for i in row_list if i == n]) # 세로 
    answer += sum([1 for i in col_list if i == n]) # 가로
    # list comprehension을 사용해서 row_list의 원소가 n과 같다면 즉, 빙고라면 새로 만들어질 list의 원소는 1
    # 만약 빙고가 2개라면 [1,1] -> sum으로 answer에 추가
    answer += 1 if left_diagonal == n else 0 # 왼쪽 대각선
    answer += 1 if right_diagonal == n else 0 # 오른쪽 대각선
    # 대각선의 경우 리스트가 아니기 때문에 단순 삼항 연산자로
       
    return answer
def solution(board, nums):
    
    size = len(board)
    ver = [0]*size
    hor = [0]*size
    diag = [0]*2
    
    idx = {}
    for i in range(size):
        for j in range(size):
            idx[board[i][j]] = (i,j)
    
    
    for elem in nums:
        # x == y
        # x + y = n - 1
        y , x = idx[elem]
        
        if y == x: diag[0] += 1
        if y == size - x - 1: diag[1] += 1
        ver[x] += 1
        hor[y] += 1
    
    return hor.count(size) + ver.count(size) + diag.count(size)
728x90

댓글