알고리즘/프로그래머스

[프로그래머스 | Lv1] 크레인 인형뽑기 게임 (Python) - 2019 카카오 개발자 겨울 인턴십

sssbin 2023. 1. 26. 17:26

 

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내가 생각한 방법은 처음엔 for문을 차례대로 돌면서 값이 0이 아닐 때 바구니에 추가하려고 했지만

매 반복문마다 0이 아닌 인덱스를 찾는게 비효율적이라고 느껴져서 아예 처음부터 0이 아닌 인덱스를 찾아놓고 시작했다.

어차피 인형들은 밑에서부터 쌓여있기 때문에 0이 아닌 인덱스를 찾아놓으면 그 이후 인덱스는 모두 0이 아님!

 

0이 아닌 가장 작은 인덱스 리스트를 구해놓고 moves를 돌리면서 바구니에 하나씩 추가했다.

이때 바구니의 가장 마지막 원소 두개가 같은 원소이면 pop()을 해주고 정답에 2를 추가한다.

 

# 프로그래머스 64061: 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십)

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