ezhoon

[인프런] 05_06 공주 구하기 본문

[Java] 인프런 문제풀이/Stack, Queue (자료구조)

[인프런] 05_06 공주 구하기

ezhoon 2022. 1. 30. 16:30

📖  문제


  • 첫 줄에 N과 K입력
  • K번째는 N에서 제외
    • 반복 후 마지막에 1명 남은 왕자 번호 출력

출력 예시

⚠️  주의사항


  • for문의 시작을 0부터가 아닌 1부터 시작으로 해야 합니다.
  • 마지막에 1명 남았을 때는 answer에 값 전달해서 return 해야 합니다.

 

✍️  이해


/**
 * 1. 첫 줄에 N(왕자의 수)과 K(제외된 왕자) 입력
 * 2. Queue에 n번째까지 저장
 * 3. Queue빈 값일 때까지 반복
 *  3-1. Queue에 poll값 집어 넣기
 *  3-2. Queue poll한 후 size == 1 -> answer에 poll 값 대입
 * 4. return answer;
 */

 

✏️  풀이



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

    public int Solution(int n, int k) {
        int answer = 0;
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 1; i <= n; i++) {
            queue.offer(i);
        }
        while (!queue.isEmpty()) {
            for (int i = 1; i < k; i++) {
                queue.offer(queue.poll());
            }
            queue.poll();
            if (queue.size() == 1) answer = queue.poll();
        }
        return answer;
    }

    public static void main(String[] args) throws IOException {

        Main T = new Main();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        System.out.println(T.Solution(n, k));

    }
}

 

 

 

Comments