sm 기술 블로그

크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십) - 파이썬 본문

문제/프로그래머스_파이썬

크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십) - 파이썬

sm_hope 2022. 10. 4. 22:36
from collections import deque
queue = deque()

def solution(board, moves):
    answer = 0
    for i in moves:
        for j in range(len(board[i-1])):
            if(board[j][i-1] != 0):
                tmp = board[j][i-1]
                board[j][i-1] = 0
                try:
                    if queue[-1] == tmp :
                        queue.pop()
                        answer+=2
                    else:
                        queue.append(tmp)
                except:
                    queue.append(tmp)
                break
    return answer

문제요약

인형을 집어 바구니에 쌓아서 넣는다. -> 바구니에 중복으로 인형이 2개 있으면 2개를 없애고 없앤 수를 answer로 한다.

 

설명

이 문제는 설명이 정말정말정말정말 불친절하다.

문제 풀다가 홧병나서 죽을 뻔 했다.

 

자.. 일단 입출력이

이거다.

 

그러면 보통 

이 두개 중 하나라 생각하지 않을까?

1번을 해보았을 때 테스트 케이스가 통과되지 않는다.

2번을 해보았을 때 아주 잘 통과된다

ok 2번이구나 하고 문제 풀면? 당신은 틀렸다....

그들은

 

이걸 말한 것이다...

정말 이거에서 어이가 없었다;;;;

 

하나 더 덧붙이면 0은 그냥 빈 상태이다.

따라서 0 자체는 의미가 없다.

지금 보니까 제가 이해를 못한거 같다...... 그냥 그런거 같다.

 

어쨋든 해설을 진행 하겠다.

 

문제는 deque를 사용하였다.(stack을 사용해도 무방하다.) => 습관이 되어 큐를 사용한 것이다.

            if(board[j][i-1] != 0):
                tmp = board[j][i-1]
                board[j][i-1] = 0

이 조건문의 경우 쉽게 생각을 해냈을 것이다.

 

                try:
                    if queue[-1] == tmp :
                        queue.pop()
                        answer+=2
                    else:
                        queue.append(tmp)
                except:
                    queue.append(tmp)

이게 문제인데

큐에 맨 위의 값과 현재 인형을 뽑아 큐에 옮기려고 하는 값이 서로 같다면 큐의 맨 위 값을 없애고 2를 더해준다.

 

예외처리를 쓴 이유는 만약 큐가 비어있을 겨우에 queue[-1]이라는 것은 진행할 수 없기 때문이다.

 

 

Comments