[프로그래머스] Lv1 - 크레인 인형뽑기 게임

김멉덥·2023년 7월 17일
0

알고리즘 공부

목록 보기
36/171
post-thumbnail
post-custom-banner

문제

프로그래머스 2019 카카오 개발자 겨울 인턴십


코드 구현

def solution(board, moves):
    answer = 0

    basket = []     # 뽑은 인형을 담는 바구니
    last_doll = 0   # 바구니에서 쌓인 인형 중 가장 위에 있는 인형을 저장해둘 변수

    for i in moves:
        # 보드의 [row][col] 중 col은 고정으로 moves에서 선택한 값에 의해 결정되고, row를 바꿔가며 탐색해야지 세로로 탐색하게 된다.
        for j in range(len(board)):
            if (board[j][i - 1] != 0):              # 만약 0이 아니라 숫자가 들어있는걸 만난다면 -> 이게 제일 맨 위에 있는 인형이다.
                basket.append(board[j][i - 1])      # 가장 위에 있는 인형이므로 우선 바구니에 넣어준다

                if (basket[-1] == last_doll):       # 만약 같은 인형종류가 들어왔던 것이면 -> 둘 다 터지면서 answer에 2개 추가
                    basket.pop(-1)
                    basket.pop(-1)
                    answer += 2

                if (len(basket) > 0):           # 인형이 터지면서 바구니가 아예 텅 비어버리면 마지막 인형을 저장할 필요가 없음
                    last_doll = basket[-1]      # 그게 아니라면 현재 바구니 상태에서 가장 위에 있는 인형을 저장하기 (다음 루프때 같은게 들어오는지 비교해야 하니까)

                board[j][i - 1] = 0         # 뽑힌 인형의 자리는 0으로 만들어서 이미 뽑혔다는 것을 업데이트!
                break

    # print(basket)

    return answer

풀이

  • 보드를 세로로 탐색 → 0이 아닌 숫자를 만난다면 → 크레인이 뽑는 칸에서 어쨋든 가장 위에 있는 인형을 찾게 된 셈 → 우선 바구니에 넣는다 → 뽑힌 인형의 자리에는 0으로 바꿔줘서 다음 탐색 때 빈 자리인 것을 업데이트
  • 만약 바구니에 쌓았는데 가장 위에 두개의 인형이 같은 모양으로 연속해있는 상태라면 → 둘 다 터지게 됨
    • 이걸 위해서 last_doll 변수 이용
    • 현재 바구니 상태에서 가장 위에 있는 인형을 저장하는 변수 (다음 루프때 같은게 들어오는지 비교하기 위해)
  • 인형은 한번에 2개씩 터지니까 만약 터진다면 answer에는 +2씩 추가된다.

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

훌륭한 글이네요. 감사합니다.

답글 달기