백준
백준 1158 - Java
으엉어엉
2024. 8. 24. 18:29
728x90
문제

내 풀이
N개의 원형에서 K번째가 죽게되는데 죽은 위치에서 계속 3번째인 사람이 죽는 것을 기록하여 그 순서를 출력하는 문제이다.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Josephus {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //N 입력 받기
int K = sc.nextInt(); //K 입력 받기
if (N < K) { //양의 정수 K(≤ N)
System.out.println("다시 입력하세요");
N=sc.nextInt();
K=sc.nextInt();
}
List<Integer> people = new ArrayList<>();//N번까지 사람 리스트에 입력.
// 1번부터 N번까지 사람들 리스트에 추가
for (int i = 1; i <= N; i++) {
people.add(i);
}
List<Integer> result = new ArrayList<>();
int index = 0; // 제거할 사람의 인덱스
while (people.size() > 0) {
// 현재 인덱스에서 K-1만큼 이동, 그 사람을 제거
index = (index + K - 1) % people.size();
result.add(people.remove(index));
}
// 요세푸스 순열 출력
System.out.print("<");
for (int i = 0; i < result.size(); i++) {
if (i == result.size() - 1) {
System.out.print(result.get(i));
} else {
System.out.print(result.get(i) + ", ");
}
}
System.out.println(">");
}
}
728x90