본문 바로가기

Algorithm/프로그래머스 연습 문제

프로그래머스 / 코딩 테스트 / 크레인 인형뽑기 게임

문제 설명

 

 

문제 해결

 

사라진 인형의 개수를 반환해야하는 문제이다.

 

일단 입출력 예부터 살펴보자.

 

 

move를 이용해서 몇 번째 행의 인형을 크레인으로 뽑을 지 결정해야 한다.

i를 이용해서 행을 아래 방향으로 순차적으로 참조해야 한다. (인형이 0이면 아무것도 안하고 넘어가므로)

 

 

인형을 뽑아주는 코드는 다음과 같이 작성할 수 있다.

def drawToy(board, moves):
    bucket = []
    for move in moves:
        cond = True
        for i in range(len(board)):
            if cond:
                if board[i][move-1] == 0:
                    pass
                else:
                    bucket.append(board[i][move-1])
                    board[i][move-1] = 0
                    cond = False

 

python에서 list를 stack처럼 사용할 수 있는 방법이 있다.

append와 pop 함수를 사용해주는 것이다.

 

 

5. 자료 구조 — Python 3.9.1 문서

5. 자료 구조 이 장에서는 여러분이 이미 배운 것들을 좀 더 자세히 설명하고, 몇 가지 새로운 것들을 덧붙입니다. 5.1. 리스트 더 보기 리스트 자료 형은 몇 가지 메서드들을 더 갖고 있습니다. 이

docs.python.org

 

이제 같은 인형을 뽑았을 때 인형을 제거해주는 코드를 추가해주면 문제가 해결된다.

 

끝에 있는 원소 2개의 값이 무엇인지 확인해야하므로 인덱스를 역순으로 참조한다.

바구니에 들어 있는 인형이 2개 이하일 때 인덱스를 참조하려고 하면 에러가 발생하니, 조건을 하나만 추가해준다.

 

def solve(board, moves):
    bucket = []
    res = 0
    for move in moves:
        cond = True
        for i in range(len(board)):
            if cond:
                if board[i][move-1] == 0:
                    pass
                else:
                    bucket.append(board[i][move-1])
                    board[i][move-1] = 0
                    cond = False
            if len(bucket) >=2 and bucket[-1] == bucket[-2]:
                res += 2
                bucket.pop()
                bucket.pop()
    return res

def solution(board, moves):
    answer = solve(board, moves)
    return answer