🐣 알고리즘 삐약/💻 백준 삐약

36 삐약 : 백준 1158| 요세푸스 [바킹독 문제 풀이|연결리스트|JAVA]

우주수첩 2023. 10. 20. 09:12
728x90

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

 

package BKD_0x3_LinkedList;

import java.io.*;
import java.util.*;

public class BOJ_1158 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(bf.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());


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

        for(int i=1;i<=N;i++) q.offer(i);

        StringBuilder sb = new StringBuilder();
        sb.append("<");

        while(q.size()!=1){
            for(int i=0;i<K-1;i++){
                q.offer(q.poll());
            }
            sb.append(q.poll()+", ");
        }

        sb.append(q.poll()+">");

        bw.write(sb.toString()+"\n");
        bw.flush();
        bw.close();
        bf.close();


    }
}

 

 

 

핵심

  • Queue를 사용하여 값을 적절하게 순환시켜야한다.
  • K번째 값을 꺼내오는 로직을 어떻게 구현해야 할지 생각이 잘 나지 않아 블로그의 도움을 받았다.
  • 순환되는 값을 처리하는 Queue에 관한 문제를 더 풀어봐야 겠다.

 

 

참고 : https://steady-coding.tistory.com/21

 

[BOJ] 백준 1158번 : 요세푸스 문제 (JAVA)

문제의 링크 : https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 요세푸스 문제는 다음과 같다. 1

steady-coding.tistory.com

 

 

 

728x90