[PRO] 2022/07/11 4문제

천호영·2022년 7월 10일
0

알고리즘

목록 보기
30/100

1. 없는 숫자 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/86051?language=python3
전체합에서 빼가는 발상을 하면 쉽게 풀린다.

def solution(numbers):
    return sum(range(10)) - sum(numbers)

2. 크레인 인형뽑기

https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=python3

def solution(board, moves):
    N = len(board)
    new_board = [[] for _ in range(N+1)] # 세로줄 기준으로
    for j in range(N):
        for i in range(N):
            if board[N-1-i][j] != 0:
                new_board[j+1].append(board[N-1-i][j])
    
    answer = 0
    basket = []
    for move in moves:
        if new_board[move]:
            basket.append(new_board[move].pop())
        
        if len(basket) >= 2 and basket[-1] == basket[-2]:
            answer += 2
            basket.pop()
            basket.pop()
        
    return answer

세로 방향으로 바꾼 뒤에 리스트에서 pop하는 방식으로 접근했는데, 그냥 있는 그대로 두고 바구니에 옮기면 값을 0으로 바꾸는 방법이 나은 것 같다.

def solution(board, moves):
    N = len(board)
    answer = 0
    basket = []
    for move in moves:
        j = move - 1
        for i in range(N):
            if board[i][j]:
                basket.append(board[i][j])
                board[i][j] = 0
        
                if len(basket) >= 2 and basket[-1] == basket[-2]:
                    answer += 2
                    basket.pop()
                    basket.pop()
                    
                break
        
    return answer
profile
성장!

0개의 댓글