728x90
반응형
2021.05.29
문제명 : 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임
사용언어 : Javascript
개발 시간 : 90분
📋 문제 설명
NxN행렬에서 인형을 뽑아 쌓을 때 중복되어 없어지는 인형의 갯수를 구하는 문제입니다
📢 입출력 예
🔑 문제 풀이
예시의 board 배열을 테이블 형식으로 표현하면 다음과 같습니다.
각각의 숫자를 '1'이라는 인형, '2'라는 인형이라고 생각하면 이해가 빠를 것입니다.
단 '0'은 비어있는 공간이라고 생각하는 것입니다.
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 |
moves [1,5,3,5,1,2,1,4]는 위 테이블 하단에 해당하는 숫자로,
⁕ 첫 번째 1의 경우
0은 비어있는 공간이라고 생각하기로 했기 때문에 크레인이 지나치므로 '4'라는 인형이 뽑힙니다.
'4'라는 인형이 뽑혔으므로 그 자리는 공백이 됩니다
⁕ 두번째 5의 경우
마찬가지로 0이라는 빈 공간 지나치면 크레인은 '3'이라는 인형을 뽑고 그 자리는 공백으로 바뀝니다.
이런 식으로 뽑으면 순서대로 4 → 3 → 1 → 1 → 3 → 2 → '없음' → 4라는 인형이 뽑힙니다.
중복이 되는 경우 인형은 터진다고 했으므로, 4 → 3 → 1 → 1 에서 '1'이라는 인형 두 개는 터지고,
4 → 3 → 3 에서 '3'이라는 인형 두 개가 터집니다.
그 후에는 더이상 중복이 발생하지 않으므로 종료됩니다.
따라서 4개의 인형이 터지게 됩니다.
이를 코드로 변경하면,
function solution(board, moves) {
var answer = 0;
var res_arr = new Array();
var chk = "N";
var y = 0;
for(var i=0; i<moves.length; i++){
if(chk == "N"){
y = i;
}
var x = moves[i] - 1;
for(var j=0; j<board.length; j++){
// 빈 공간이 아니라면
if(board[j][x] != 0){
// 해당 인형을 넣기
res_arr.push(board[j][x]);
// 뽑힌 인형 자리는 빈 공간(0)으로 변경
board[j][x] = 0;
// 중복 발생시
if((res_arr[y] == res_arr[y-1])){
// 터지는 인형은 기존것과 새로 뽑힌것 : 총2개
answer = answer + 2;
// 기존것 제거(터지기)
res_arr.pop();
// 새로뽑힌 것 제거(터지기)
res_arr.pop();
y--;
chk = "Y";
}else{
y++;
}
break;
}
}
}
return answer;
}
728x90
반응형
'Programmers > Javascript' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 javascript (0) | 2021.07.14 |
---|---|
[프로그래머스] 키패드 누르기 javascript (0) | 2021.06.26 |
[프로그래머스] 폰켓몬 javascript (0) | 2021.06.13 |
[프로그래머스] 실패율 javascript (0) | 2021.06.11 |
[프로그래머스] 예산 javascript (0) | 2021.05.30 |