🚩 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/64061
◾ N x N의 격자가 주어진다.
◾ 각 인형은 아래에서부터 차곡차곡 쌓여있다.
◾ 게임 사용자는 크레인을 좌우로 움직여서 인형을 뽑을 수 있다.
◾ 그리고 오른쪽의 빈 바구니에 인형을 담을 수 있다.
◾ 인형을 뽑고 오른쪽 바구니에 연속된 인형이 담겨졌을 시 두 인형이 터트려져 사라지게 된다.
◾ 인형이 없는 곳에서 크레인을 작동시키면 아무런 일도 일어나지 않는다.
◾ 터트려진 인형의 수를 구하는 문제
✅ 입출력
board : 인형이 들어있는 정사각형의 격자 배열
moves : 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열
return ➡️ 터트려진 인형의 갯수를 반환
board | moves | return |
[[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]] | [1,5,3,5,1,2,1,4] | 4 |
📑 문제 풀이
with 파이썬 (Python)
def solution(board, moves):
ans = 0
stack = []
for i in moves:
for j in range(len(board)):
num = board[j][i - 1]
if num != 0:
stack.append(num)
board[j][i - 1] = 0
if len(stack) > 1:
if stack[-1] == stack[-2]:
stack.pop()
stack.pop()
ans += 2
break
return ans
◾ 스택을 사용해서 쉽게 풀 수 있었다.
◾ 세로로 움직여야 하기 때문에 유의할 필요가 있다.
만약 moves = [1, 5, 3, 5, 1, 2, 1, 4] 라면
i | j | i - 1 | board[j][i-1] |
1 | 0 1 2 3 4 | 0 | 0 0 0 4 3 : board에서 1열만 훑는다 |
5 | 0 1 2 3 4 | 4 | 0 3 1 2 1 : board에서 5열만 훑는다 |
3 | 0 1 2 3 4 | 2 | 0 1 5 4 1 : board에서 3열만 훑는다 |
◾ 이런식으로 열만 훑으면서 반복문을 돈다.
◾ stack 배열에 해당 값을 가져와서 넣고 값은 0으로 만들어준다.
◾ 만약 stack 배열에서 제일 끝과 제일 끝 앞에 인덱스의 값이 같다면 둘다 빼내준다.
- 같은 인형이면 터트려주는 과정을 이른다.
- 두 개의 인형이 동시에 터지므로 ans 에 2씩 더해준다.
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 프로그래머스' 카테고리의 다른 글
[PG42860] 조이스틱 (0) | 2021.11.06 |
---|---|
[PG42840] 모의고사 (0) | 2021.11.06 |
[PG67256] 키패드 누르기 (0) | 2021.11.06 |
[PG81301] 숫자 문자열과 영단어 (0) | 2021.11.06 |
[PG60057] 문자열 압축 (0) | 2021.11.06 |