2019 카카오 개발자 겨울 인턴십 문제
문제풀이
1. move의 앞에서부터 요소 m을 한개 씩 뽑습니다.
2. board에서 (m-1)열에 인형이 있는지 확인하고, 있다면 가장 높이 있는 인형의 높이를 찾습니다.
3. board에서 인형을 뽑았다면 뽑은 위치의 값을 0으로 수정합니다.
4. 인형을 넣을 스택을 선언합니다.
5. 과정 2에서 뽑은 인형을 스택의 탑과 비교한 후, 같으면 둘다 없애고 다르다면 둘다 넣어줍니다.
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
from collections import deque
def solution(board, moves):
answer = 0
q = deque()
board.insert(0, [0 for i in board[0]])
for m in moves:
m -= 1
y = get_top(board, m)
# 들어 있으면
if y:
doll = board[y][m]
board[y][m] = 0
if q:
tmp = q.pop()
if doll == tmp:
answer += 2
continue
else:
q.append(tmp)
q.append(doll)
else:
q.append(doll)
return answer
# 들어 있으면, 인형의 높이를 반환
def get_top(board, idx):
for i, v in enumerate(board):
if v[idx] != 0:
return i
return 0
|
cs |
Line 5 : 뽑은 인형을 넣어줄 스택으로, deque 자료구조를 사용했습니다.
Line 8 : moves의 경우 맨 앞이 0이 아닌 1이므로, 편의상 -1을 해줍니다.
Line 26 : 해당 열에 인형이 있다면 가장 높은 인형의 위치를 반환해줍니다.
Line 6 : 인형이 맨 위에 있을 경우, get_top 함수가 0을 반환하여 안들어있다고 인식하는 문제를 개선하기 위해 맨 위에 모든 요소가 0인 리스트를 넣어줬습니다. get_top 함수가 True, False를 같이 반환하도록 한다면 이 과정이 생략될 수 있습니다.
Line 11 : 해당 열에 인형이 들어있는 경우입니다.
Line 14 : 인형을 넣는 스택에 인형이 들어있는 경우입니다.
Line 16 : 스택의 탑과 인형이 같은 경우 입니다. 탑을 다시 넣어주지 않고 넘어갑니다.
Line 19 : 스택의 탑과 인형이 다른 경우, 둘다 다시 넣어줍니다. 탑을 먼저 넣어주어야합니다.
Line 22 : 스택이 비어있는 경우, 인형을 넣어줍니다.
문제 링크
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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
programmers.co.kr
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 문자열 압축 (0) | 2020.11.09 |
---|---|
프로그래머스 삼각 달팽이 (0) | 2020.10.16 |
프로그래머스 두 개 뽑아서 더하기 (0) | 2020.10.16 |
프로그래머스 '2020 카카오 인턴십' 키패드 누르기 (0) | 2020.10.09 |
프로그래머스 Lv3 추석 트래픽 (0) | 2020.09.10 |