본문 바로가기
Baekjoon

[백준] 1158번 요세푸스 문제 (Java)

by Chaewon Park 2024. 3. 6.

https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net


문제


알고리즘

 

이 문제는 Queue를 사용해서 문제를 해결하면 쉽다!

 

1. 1~N까지의 정수를 Queue에 add 해준다.

2. K-1번을 poll해서 다시 Queue에 add해준다.

3. 그러면 Queue의 맨 앞의 숫자를 poll 해서 삭제한다.

4. 1~3번을 Queue의 size가 1일 때까지 반복한다.

5. 마지막 Queue의 숫자를 빼서 해결 !

 


코드
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String [] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        Queue<Integer> que = new LinkedList<>();

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

        for(int i=1; i<=N; i++) {
            que.offer(i);
        }

        int cnt = 1;
        bw.write("<");
        while(que.size() != 1) {
            if(cnt == K) {
                bw.write(que.peek() + ", ");
                que.poll();
                cnt = 1;
            }
            else {
                que.offer(que.poll());
                cnt++;
            }
        }

        bw.write(que.poll() + ">");
        
        bw.flush();
        br.close();
        bw.close();
    }
}

'Baekjoon' 카테고리의 다른 글

[백준] 17413번 단어 뒤집기2 (Java)  (0) 2024.03.08
[백준] 1406번 에디터 (Java)  (0) 2024.03.07
[백준] 2164번 카드2 (Java)  (1) 2024.02.28
[백준] 1920번 수 찾기 (Java)  (1) 2024.02.27
[백준] 9012번 괄호 (Java)  (3) 2024.02.27