코딩테스트

[코딩테스트] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기(Javascript)

보오 2021. 11. 22. 21:45

문제 보러 가기:

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

나의 풀이:

https://programmers.co.kr/learn/courses/30/lessons/64061/solution_groups?language=javascript&type=my 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

새로운 보드를 만들어서 moves가 그 보드를 돌게 했다.

그리고 stack을 쌓아 같은 것이면 빼줬다.

function solution(board, moves) {
  let answer = 0;
  let new_board = [];
  let bukets = [];
  
  // 보기 쉽게 새로운 보드를 만든다.
  for (let i = 0; i < board.length; i++) {
    let tmp = [];
    for (let j = 0; j < board[i].length; j++) {
      tmp.push(board[j][i]);
    }
    new_board.push(tmp);
  }
 
  // moves의 각 원소를 돌면서 stack에 넣어준다.
  // 이 때 0이면 그 다음 원소를 빼고(shift 이용)
  // 만약 한 라인에서 더이상 뽑을 인형이 없으면 아무 일도 일어나지 않으므로 return 해준다.
  moves.forEach((m) => {
    if (new_board[m - 1].length === 0) return;
    let item = new_board[m - 1].shift();
    while (item === 0) {
      item = new_board[m - 1].shift();
    }
	// stack의 맨 마지막 원소와 똑같으면 빼주고 2를 더한다.
    if (item === bukets[bukets.length - 1]) {
      bukets.pop();
      answer += 2;
    } else bukets.push(item);
  });
  return answer;
}

다른 사람 풀이 보면 엄청 고차원적이던데 나는..ㅜㅜ