[프로그래머스] 크레인 인형뽑기 게임
문제
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/64061
코드
function solution(board, moves) {
//바구니
let result = [];
let cnt = 0;
//moves
for(let i=0; i<moves.length; i++){
let idx = 0;
let item = 0;
//뽑기
for(let j=0; j<board.length; j++){
if(board[j][moves[i]-1] !== 0){
item = board[j][moves[i]-1];
idx = j;
break;
}
}
if(item === 0) continue;
//바구니에서 비교
//뽑기한거랑 바구니 맨 위랑 같으면
if(result.length>=1 && result[result.length-1] === item){
//맨 위지우고
result.pop();
//뽑힌거 삭제
board[idx][moves[i]-1] = 0;
//카운트
cnt+=2;
continue;
}
//결과 바구니
result.push(item);
//뽑힌거 삭제
board[idx][moves[i]-1] = 0;
}
return cnt;
}
소감
일단 재밌었다. 푸는데 시간은 꽤 들였지만 생각한대로 나온거같음.
다른 풀이
function solution(board, moves){
let answer=0;
let stack=[];
moves.forEach(pos => {
for(let i=0; i<board.length; i++){
if(board[i][pos-1]!==0){
let tmp=board[i][pos-1];
board[i][pos-1]=0;
if(tmp===stack[stack.length-1]){
stack.pop();
answer+=2;
}
else stack.push(tmp);
break;
}
}
});
return answer;
}
이 코드가 내 코드랑 효율차이가 얼마나 날지 모르겠지만 일단 코드자체는 상당이 간략해진 것 같다.
나는 continue
를 두 번 사용했는데 사용하면서도 약간 아닌가? 싶기도 했다.
아무튼 푸는 방식은 비슷한듯