문제
https://programmers.co.kr/learn/courses/30/lessons/64061
코딩테스트 연습 - 크레인 인형뽑기 게임
[[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
내 풀이
moves는 board에 접근할 (column index + 1)이다.
moves를 돌면서 board의 column에 접근하여 가장 위에 있는 숫자를 bucket에 넣었다.
bucket이 빈 공간이 될 때까지, bucket의 원소를 stack에 넣었다.
bucket에서 뺀 인형이 stack의 마지막 원소와 동일하면 stack에서 pop을 하였다.
pop을 할 때 answer를 갱신하면 답이 만들어진다.
def solution(board, moves):
answer = 0
bucket = []
for move in moves:
move -= 1
# column
q = [x[move] for x in board]
idx = -1
for i in range(len(q)):
if q[i] != 0:
bucket.append(q[i])
idx = i
board[i][move] = 0
break
stack = []
while bucket:
x = bucket.pop(0)
if not stack:
stack.append(x)
else:
if stack[-1] == x:
stack.pop()
answer += 2
else:
stack.append(x)
return answer
다른 풀이
코드를 좀 더 짧게 짰다.
먼저 moves를 돌면서 stacklist에 인형을 넣는다. stacklist에 인형이 2개 이상 들어있을 때 stacklist의 마지막 인형과 마지막 인형의 밑에 있는 인형이 서로 같은지 비교한다. 이때 answer를 갱신한다.
def solution(board, moves):
stacklist = []
answer = 0
for i in moves:
for j in range(len(board)):
if board[j][i-1] != 0:
stacklist.append(board[j][i-1])
board[j][i-1] = 0
if len(stacklist) > 1:
if stacklist[-1] == stacklist[-2]:
stacklist.pop(-1)
stacklist.pop(-1)
answer += 2
break
return answer
총평
나는 단계를 나누어서 문제를 풀었다면, 다른 풀이는 단계를 합쳐서 문제를 풀었다.
어떤 것이 맞다고 할 수는 없지만, 단계를 합칠 수도 있다는 것을 배웠다.
'알고리즘 > 카카오 EASY' 카테고리의 다른 글
괄호 변환 (Level 2) (0) | 2022.06.25 |
---|---|
메뉴 리뉴얼 (Level 2) (0) | 2022.06.25 |
키패드 누르기 (Level 1) (0) | 2022.05.26 |
숫자 문자열과 영단어 (Level 1) (0) | 2022.05.25 |
오픈채팅방 (Level 2) (0) | 2022.05.24 |