-
프로그래머스 - 크레인 인형뽑기 게임 (JavaScript)etc/coding test 2020. 4. 18. 22:06
문제 : https://programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결 과정
1. board를 사용하기 편한 모양으로 바꾼다.
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는 row가 아니라 col 기준이므로 board를 뒤집으려고 했다.
0 0 0 4 3 0 0 2 2 5 0 1 5 4 1 0 0 0 4 3 0 3 1 2 1 그랬더니 0이 거슬려서 그냥 0은 제외하고
[4,3]
[2,2,5]
[1,5,4,1]
[4,3]
[3,1,2,1]
이렇게 보드를 셋팅했다.
2. moves를 탐색하면서 bucket으로 인형을 옮긴다.
선택되는 인형은 언제나 newBoard[moves-1][0]
2-1) 선택된 인형이 undefiend인 경우(인형이 없음)는 아무일도 일어나지 않음
2-2-1) 선택된 인형이 bucket의 마지막 인형과 같은 인형일 때
-> bucket의 인형, newBoard에서 선택된 인형 제거 후 answer += 2
2-2-2) 선택된 인형이 bucket의 마지막 인형과 같지 않을 때
-> bucket에 추가하고 newBoard에서는 제거
(newBoard에서 제거하는 과정은 겹치니까 제일 마지막으로 빼줌)
코드
function solution(board, moves) { var answer = 0; // board 뒤집기 const newBoard = []; for (let i = 0; i < board.length; i++) { const row = []; for (let j = 0; j < board.length; j++) { if (board[j][i]) { row.push(board[j][i]); } } newBoard.push(row); } // moves 순환 const bucket = []; moves.map((element) => { const doll = newBoard[element - 1][0]; if (doll === undefined) { } else { if (doll === bucket[bucket.length - 1]) { bucket.pop(); answer += 2; } else { bucket.push(doll); } newBoard[element - 1].shift(); } }); return answer; }
생각해보고 싶은 점
보드를 가공하지 않고, 처음 상태에서 바로 푸는 게 더 나은가?
출처:
프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'etc > coding test' 카테고리의 다른 글
프로그래머스 - 프린터 (JavaScript) (0) 2020.04.20 프로그래머스 - 괄호 변환 (JavaScript) (0) 2020.04.19 nthFibonacci - 피보나치 수열의 n번째 숫자 찾기 (0) 2020.02.15 isSubsetOf - 배열이 완전히 포함되는지 확인하는 배열 메서드 작성 (0) 2020.02.15 firstNonRepeatedCharacter - 반복되지 않는 첫문자 찾기 (0) 2020.02.15