티스토리 뷰
반응형
문제
정보 왕국의 이웃 나라 외동딸 공주가 숲속의 괴물에게 잡혀갔습니다.
정보 왕국에는 왕자가 N명이 있는데 서로 공주를 구하러 가겠다고 합니다. 정보왕국의 왕은 다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정하기로 했습니다.
왕은 왕자들을 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다. 그리고 1번 왕자부터 N 번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시 계방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정숫자)를 외치면 그 왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시 1부터 시작하여 번호를 외친다.
이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다.
예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외된다고 하자. 처음에는 3번 왕자가 3 을 외쳐 제외된다. 이어 6, 1, 5, 2, 8, 4번 왕자가 차례대로 제외되고 마지막까지 남게 된 7 번 왕자에게 공주를 구하러갑니다.
N과 K가 주어질 때 공주를 구하러 갈 왕자의 번호를 출력하는 프로그램을 작성하시오.
입력 예제
8, 3
출력 예제
7
풀이
큐(Queue)를 이용하여 푼다.
function solution(n, k) {
let answer = 0;
let queue = Array(n).fill().map((v, i) => i + 1);
// queue의 개수가 0이 되기 전까지만
while(queue.length) {
// k가 되기 전에는
// 맨 앞의 값을 뒤로 보내기
for (let i = 1; i < k; i++) queue.push(queue.shift());
// k가 되면 맨 앞 제거
queue.shift();
// 1개 남았을 때
if (queue.length === 1) answer = queue.shift();
}
return answer;
}
반응형
'Data Structure & Algorithm' 카테고리의 다른 글
[알고리즘-JS] Special Sort (구글 인터뷰) (0) | 2022.05.04 |
---|---|
[알고리즘-JS] 오름차순 정렬 - sort(), 선택 정렬, 버블 정렬 (0) | 2022.05.04 |
[알고리즘-JS] 스택(stack) - 후위식 연산 (0) | 2022.05.04 |
[알고리즘-JS] 스택(stack) - 소괄호 사이 문자 제거 (0) | 2022.05.04 |
[알고리즘-JS] 해시(hash) + 아나그램(Anagram) + 투 포인터(two pointer) + 슬라이딩 윈도(Sliding Window) (0) | 2022.05.04 |