문제
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
인형뽑기 기계를 모바일 게임으로 만들었을 때, 특정 위치의 인형을 바구니에 담고, 바구니에서 연속으로 같은 인형이 쌓이면 터뜨리는 방식이다. 게임 화면의 격자의 상태가 담긴 2차원 배열과 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열이 주어질 때, 터트려져 사라진 인형의 개수를 구하는 문제다.
제한사항
- board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
- board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
- 0은 빈 칸을 나타냅니다.
- 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
- moves 배열의 크기는 1 이상 1,000 이하입니다.
- moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.
예시
Example 1:
board: [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]]
moves: [1,5,3,5,1,2,1,4]
result: 4
풀이
def solution(board, moves):
answer = 0
basket = []
for move in moves:
#바구니로 옮기고 캐릭터 위치 -> 0
for row in board:
if row[move - 1] != 0:
basket.append(row[move - 1])
row[move - 1] = 0
break
# 바구니에 쌓고 직전 캐릭터와 동일하면 pop, answer += 2
if len(basket) > 1 and basket[-1] == basket[-2]:
basket.pop()
basket.pop()
# basket = basket[:-2]
answer += 2
return answer
- moves 리스트를 순회하며 이동 순서에 따라 인형을 뽑는다.
- 보드의 특정 열에서 인형을 찾는다.
- 보드에서 0이 아닌 숫자를 발견하면, 그 숫자를 바구니로 추가하고 해당 자리는 0으로 바꿔준다.
- break를 사용하여 각 이동에서 처음 만나는 인형만 바구니로 옮기고 다음 이동으로 넘어간다.
- 바구니에서 마지막 두 개의 인형이 같으면, 그 두 인형을 제거한다.
- 제거하여 터뜨릴 때마다 answer에 2를 더한다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 콜라 문제 - 파이썬/python (0) | 2024.11.25 |
---|---|
[프로그래머스] 신고 결과 받기 - 파이썬/python (1) | 2024.11.19 |
[프로그래머스] 키패드 누르기 - 파이썬/python (0) | 2024.11.06 |
[프로그래머스] 옹알이(1) - 파이썬/python (0) | 2024.10.31 |
[백준(BOJ)] 14888번 연산자 끼워넣기 - 파이썬/python (0) | 2024.10.25 |