※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[실버5] 11866. 요세푸스 문제 0 (Java)

J 크 2023. 9. 7. 15:01
728x90
반응형

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

요세푸스!


※  문제를 요약하면 아래와 같습니다.

▶ 1번 부터 N번까지 N명의 사람이 원으로 앉아서 차례 대로 K번째 사람을 제거

  모든 사람이 제거 될 때 까지 반복

  원에서 사람들이 제거 되는 순서를 (N,K) - 요세푸스 순열 이라고 정의

    ex) (7,3) 요세푸스 순열 =  <3, 6, 2, 7, 5, 1, 4>

  N과 K가 주어졌을 때, 요세푸스 순열 출력

  Input : 첫째 줄에 N 과 K가 공백을 기준으로 주어짐

  Output : 해당 요세푸스 순열 출력


◈ Input - 1

7 3

◈ Output - 1

<3, 6, 2, 7, 5, 1, 4>

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

▶ 1~N까지 큐 자료구조로 구성

 K번째 탐색 되는 원소를 제외한 원소들은 큐 구조에 맞추어 제거 후 다시 큐에 입력 (FIFO)

K번째 탐색 시 큐에서 완전히 제거 후 출력


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
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 {
		
		// 대박 대박 대박
		//System.setIn(new FileInputStream(Main.class.getResource("input.txt").getPath()));
		
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
	
		StringTokenizer st = new StringTokenizer(bReader.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		Queue<Integer> qJosephus = new LinkedList<>();
		
		for(int i = 1 ; i <= N; i++) {
			qJosephus.add(i);
		}
		
		int nCount = 1;
		
		bWriter.write("<");
		while(!qJosephus.isEmpty()) {
			if(nCount != K) {
				qJosephus.add(qJosephus.poll());
			} else {
				if(qJosephus.size() != 1)
					bWriter.write(qJosephus.poll() + ", ");
				else
					bWriter.write(String.valueOf(qJosephus.poll()));
				
				nCount = 0;
			}
			nCount++;
		}
		bWriter.write(">");
	
		bWriter.flush();
		bWriter.close();
	}

}

 코로나로 잃은 감 찾아가는 즁,,,

Good Luck! (피드백 감사합니다!)