※ 백준 (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! (피드백 감사합니다!)