본문 바로가기
코테연습

43. 크레인 인형 뽑기 게임

by hxunz 2022. 5. 13.

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

 

//1. 이해
// NxN 크기의 1x1 크기로 격자가 있는 정사각 게임 화면
// 격자의 가장 아래칸부터 채워져있음
// 바구니의 가장 아래부터 뽑은 인형이 쌓임
// 바구니에 같은 인형이 연속되면 터져서 없어짐
// 인형이 없는 곳에서 크레인을 작동시키면 아무런 일도 없다
// board = 격자
// moves 어디서 인형 뽑는지

// 2.계획
// 배열 moves를 for문을 사용해서 돌린다
// moves[0]을 찾아
// -> board[0][0]이 0이라면 그다음 board[0][1]로 가고 0이 아닌 숫자가 나올때까지 반복
// 0이 아닌 숫자가 나왓다?
// 그럼 이걸 push해서 빈 배열에 넣어줘.
// 이때, 빈배열에 숫자를 넣어주다 이번에 push 하려는 숫자가 배열의 마지막 요소랑 같다면 pop해준다

 

function solution(board, moves) {
  let basket = [];
  let result = 0;

  for (i = 0; i < moves.length; i++) {
    for (j = 0; j < board.length; j++) {
      if (board[j][moves[i] - 1] !== 0) {
        if (basket[basket.length - 1] === board[j][moves[i] - 1]) { 
          result += 2;
          basket.pop();
        } else {
          basket.push(board[j][moves[i] - 1]);
        }
        board[j][moves[i]-1] = 0;
        break;
      }
    }
  }
  return result;
}

우선, 뽑은 인형을 담아줄 빈 배열을 만들어줬다.

let basket = [];
 

그리고 같은 모양의 인형이 쌓여서 터질때 인형이 총 몇개가 터졌는지에 대한 값을 카운트하기 위해서 result=0을 해줬다.

let result = 0;
 

moves배열이랑 board 배열내 요소를 순회하기 위해서 반복문을 두번 사용했다.

for (i = 0; i < moves.length; i++) {
for (j = 0; j < board.length; j++) {
 

만약에 board[0][0]이 0이 아닐경우에

if (board[j][moves[i] - 1] !== 0) {
 

basket 맨 마지막 요소가 현재 확인중인 board[0][0]과 같다면 

if (basket[basket.length - 1] === board[j][moves[i] - 1]) {
 

result에 2를 더하고

result += 2;
 

basket의 마지막 요소를 뺀다.

basket.pop();
 

같지 않다면 현재 확인중인 요소를 basket에 넣어준다.

else {
basket.push(board[j][moves[i] - 1]);
}
 

인형을 뽑고 난 자리는 0으로 채우고

board[j][moves[i]-1] = 0;
 

순회중인 배열을 마친다. 

break;
 

그리고 결과 리턴

 

'코테연습' 카테고리의 다른 글

45. 키패드 누르기  (0) 2022.05.17
44. 없는 숫자 더하기  (0) 2022.05.13
42. 숫자 문자열과 영단어  (0) 2022.05.12
41. 로또의 최고순위와 최저순위  (0) 2022.05.11
40. 신규 아이디 추천  (0) 2022.05.05

댓글