요세푸스순열

황상익·2023년 12월 15일
0

백준

목록 보기
7/15

끄적여본 풀이


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class 요세푸스문제 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        StringBuilder sb = new StringBuilder();
        sb.append("<");

        Queue<Integer> queue = new LinkedList<>();
        for(int i=1;i<=n;i++){
            queue.offer(i);
        }
        int cnt = 0;
        while(queue.size()!=1){
            int data = queue.poll();
            cnt++;
            if(cnt%k == 0){
                sb.append(data).append(", ");
            }else queue.add(data);
        }

        sb.append(queue.poll()).append(">");
        System.out.println(sb);
    }
}

import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.stream.IntStream;

public class 요세푸스문제_1 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Queue<Integer> q = 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++) {
            q.add(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()).append(", ");
        }

        // 마지막 원소 출력한 뒤 > 도 붙여준다.
        sb.append(q.poll()).append('>');

        System.out.println(sb);
    }

}
profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글