본문 바로가기

코딩테스트

[Javascript] 공주 구하기

공주 구하기

정보 왕국의 이웃 나라 외동딸 공주가 숲속의 괴물에게 잡혀갔습니다.

정보 왕국에는 왕자가 N명이 있는데 서로 공주를 구하러 가겠다고 합니다. 정보왕국의 왕은
다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정하기로 했습니다.

왕은 왕자들을 나이 순으로 1번부터 N번까지 차례로 번호를 매긴다. 그리고 1번 왕자부터 N
번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시
계방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정숫자)를 외치면 그
왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시
1부터 시작하여 번호를 외친다.

이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다.

image



예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외된다고 하자. 처음에는 3번 왕자가 3
을 외쳐 제외된다. 이어 6, 1, 5, 2, 8, 4번 왕자가 차례대로 제외되고 마지막까지 남게 된 7
번 왕자에게 공주를 구하러갑니다.

N과 K가 주어질 때 공주를 구하러 갈 왕자의 번호를 출력하는 프로그램을 작성하시오.



입력설명

첫 줄에 자연수 N(5<=N<=1,000)과 K(2<=K<=9)가 주어진다.

출력설명

첫 줄에 마지막 남은 왕자의 번호를 출력합니다.


입력예제1

8 3


출력예제1

7



풀이과정

  1. 1부터 n까지의 숫자 배열을 만들어놓는다.
  2. 반복문을 돌면서 k 이전까지의 값들을 빼서 1에서 만든 배열 뒤에 담는다(큐)
  3. 배열의 k번째 수를 제거한다.(shift())
  4. 배열의 개수가 1이 남을 때 까지 돌고 1의 인덱스 값을 출력한다.

나의 Solution

function solution(n, k){
    let answer;
    let arr = Array.from({length:n}, (v,i) => i+1);
    wwhile(arr.length){
      let a = arr.splice(0,k-1);
      arr.shift();
      arr.push(...a)

       if(arr.length === 1){
        answer = arr.shift()
      }
    }
    return answer;
}


다른 Solution

function solution(n, k){
    let answer;
    let queue=Array.from({length:n}, (v, i)=>i+1); 
    while(queue.length){
      for(let i=1; i<k; i++) queue.push(queue.shift());
      queue.shift();
      if(queue.length===1) answer=queue.shift();
    }  
    return answer;
}

'코딩테스트' 카테고리의 다른 글

[백준 - 1012] 유기농 배추 Javascript(Node.js)  (0) 2022.04.28
[Javascript] 결혼식  (0) 2022.04.16
[Javascript] 최대 매출  (0) 2022.04.11
[Javascript] 연속 부분수열 1  (0) 2022.04.10
[백준] 스택 - 파이썬  (0) 2021.09.27