알고리즘 문제풀이/프로그래머스
크레인 인형뽑기 게임 / js 풀이
Heman
2021. 7. 7. 02:39
프로그래머스 : 크레인 인형뽑기 게임
https://programmers.co.kr/learn/courses/30/lessons/64061
문제풀이
이번 문제는 프로그래머스의 2019 카카오 개발자 겨울 인턴십 코딩 테스트에서 출제되었던 문제입니다.
개발공부를 시작한지 얼마 되지 않았을 적 풀었을 때는 어렵다고 생각했었는데, 지금 보니까 그다지 어려운 문제는 아니었던 것 같아요^^
moves 배열에 해당하는 인덱스 만큼 2차원 배열 아래로 이동시키며 인형을 뽑습니다.
뽑은 인형은 스택( 저는 그냥 배열을 사용했습니다 )에 담아, 다음에 뽑은 인형과 비교하여 카운트를 해 나가면 됩니다.
자세한 설명은 아래 코드에 주석으로 기재하였습니다~
코드
function solution(board, moves) {
let result = []; // 바구니
let cnt = 0;
for(let i=0; i<moves.length; i++){
// moves의 길이만큼만 작동합니다.
const peek = moves[i]-1; // moves 순서에 맞는 인덱스를 위해 1을 빼줍니다
for(let j=0; j<board.length; j++){
if( board[j][peek] === 0 ) continue;
// 뽑기 기계가 0을 만나면 아래로 내려가도록, 배열의 다음 순서로 넘깁니다
else{
const lastLength = result.length <= 1 ? 0 : result.length-1;
// 바구니 배열의 크기가 1보다 작거나 같으면 배열의 첫번째 인덱스를, 그렇지 않으면 마지막 인덱스를 사용합니다.
if(result[lastLength] === board[j][peek]){
// 바구니의 마지막 인형과 방금 뽑은 인형이 같으면
board[j][peek] = 0;
// 0으로 만들고(인형을 뽑고)
result.splice(lastLength);
// 바구니의 마지막 배열을 지운 후
cnt += 2;
// 인형 수만큼 숫자를 카운트 합니다
}
else{
// 바구니의 마지막 인형과 방금 뽑은 인형이 다르면
result.push(board[j][peek]);
// 바구니에 넣고
board[j][peek] = 0;
// 인형 자리는 0으로 만듭니다
}
break;
// break를 해주지 않으면 뽑기의 마지막 하단부까지 뽑기 때문에, 인형을 뽑았으면 break를 걸어줍니다
}
}
}
return cnt;
}
리뷰
처음에 break를 생각하지 않아서 결과가 이상하게 나왔었는데, console.log를 찍어보니 인형을 뽑은 순간 다음 moves를 실행하지 않고 배열의 마지막 깊이까지 인형을 뽑고 있었습니다..ㅎ
개발을 처음 공부하던 시절( 그래봤자 1년전 ) c++로 문제를 풀어보았을 때는 머리도 아프고 많이 헤맸었는데, 다시 풀어보니 그렇게 어렵지 않고 재밌는거 같네요 ㅎㅎ