230112 TIL - 백준 11866번: 요세푸스 문제 0(JAVA)

won·2023년 1월 12일
0

알고리즘 문제풀이

목록 보기
5/32

TIL

큐 관련 백준 문제를 풀었다.
이제 큐 말고 다른 자료구조로 넘어가야 겠다.. 덱이라던지..

백준 11866번: 요세푸스 문제 0

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

로직만 구하면 쉬운데 로직이 맞는지 잘 모르겠어서.. 해맴.

  1. 1부터 N까지 큐에 add 한다.

  2. K - 1 번째까지는 첫 번째 값을 맨 뒤로 보낸다.

  3. K번째 일때는 poll한다.

  4. Queue의 사이즈가 1개일 때까지 반복한다.

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

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> queue = new LinkedList<>();

		StringTokenizer st = new StringTokenizer(br.readLine());

		int K = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());
		
		bw.write("<");
		
		LinkedList<Integer> ls = new LinkedList<Integer>();
		
		for (int i = 1; i <= K; i++) {
			queue.add(i);
		}
		
		while (queue.size()!=1) {
			for (int j = 0; j < N - 1; j++) {
				queue.add(queue.poll());
			}
			bw.write(queue.poll()+", ");
		}
		
		bw.write(queue.poll()+">");
		bw.flush();
		bw.close();
	}
}

추가로 처음엔 sysout문을 사용하고 그 다음은 버퍼를 사용해서 출력했는데,
시간 절약이 어마어마 하게 돼서 놀랐다.

요즘 자꾸 문제만 풀게된다.. 이론 공부를 하자.

profile
뭐라도 하자

0개의 댓글