1158 - 요세푸스

slee2·2021년 12월 29일
0

백준

목록 보기
15/20

문제

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

풀이

나는 이 문제를 큐(Queue)를 이용하여 해결하였다.

poll - 첫 번째 값을 반환하고 제거한다.
remove - 첫 번째 값을 제거한다.
peek - 첫 번째 값을 반환한다.

add - 리스트의 마지막에 값을 추가한다.
offer - 리스트의 마지막에 값을 추가한다.
둘의 차이는 add는 실패했을때 예외가 발생한다는 점??

이러한 특징을 이용하여 해결하였고 로직은 간단하다.

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

public class Num1158 {

    public static int N;
    public static int K;
    public static Queue<Integer> queue = new LinkedList<>();

    public static void main(String[] args) {
        //input
        Scanner scanner = new Scanner(System.in);
        String[] a = scanner.nextLine().split(" ");
        N = Integer.parseInt(a[0]);
        K = Integer.parseInt(a[1]);
        for (int i=1; i<=N; i++)
            queue.add(i);

        //logic, output
        System.out.print("<");
        while (!queue.isEmpty()) {
            for (int i=1; i<=K - 1; i++) {
                queue.add(queue.poll());
            }
            System.out.print(queue.poll());
            if (!queue.isEmpty())
                System.out.print(", ");
        }
        System.out.println(">");
    }
}

0개의 댓글

관련 채용 정보