크레인 인형 뽑기 게임
https://school.programmers.co.kr/learn/courses/30/lessons/64061
function solution(board, moves) {
var answer = 0;
const stack = []
const removed = []
moves.map(e => {
for(let i = 0; i < board.length ; i++){
if(board[i][e-1] !== 0){
stack.push(board[i][e-1])
board[board.indexOf(board[i])][e-1] = 0
if(stack[stack.length-1] === stack[stack.length-2]){
removed.push(stack.pop())
removed.push(stack.pop())
}
break
}
}
})
answer = removed.length
return answer;
}
문제의 글이 길어서 감을 못 잡았는데,,, 정말 어렵지 않은 문제였다.
문제의 핵심은 뽑은 인형 배열과 사라진 인형 배열을 관리하는 것
이라고 생각한다.
그래서 각각 stack
과 removed
로 배열을 선언했다.
그리고 이 후에 moves 배열에서 크레인의 이동 포인트를 map함수로 뽑아서, board 배열을 돌며 그 값이 0이면 다음으로 넘기고 0이 아니면 stack
배열에 넣는다.
stack
배열에 넣을 때 그 배열 내에서 사라지는 값이 있으면 remove
배열에서 따로 관리해주면 된다.
왜 오래 걸렸을까...
function solution(board, moves) {
var answer = 0;
const stack = []
let count = 0
moves.map(e => {
for(let i = 0; i < board.length ; i++){
if(board[i][e-1] !== 0){
if(stack[stack.length-1] === board[i][e-1]){
stack.pop()
count +=2
}
else{
stack.push(board[i][e-1])
}
board[board.indexOf(board[i])][e-1] = 0
break
}
}
})
answer = count
return answer;
}
코드 개선이라고 생각했는데, 효율성의 개선은 이루어지지 않은 것 같은 느낌?(밑의 속도를 보라)
일단 위에서는 일단 크래인으로 인형을 뽑으면 stack
에 쌓이게 했는데,
그 과정을 없애고 stack
에 들어가기 전에 조건을 걸어서
stack의 마지막 인형
이 지금 뽑힌 인형과 같은 지 확인하여 처리하도록 바꿨다.
[문제풀이 1]
[문제풀이 2]