링크 : https://www.acmicpc.net/problem/1158
문제 설명
N명의 사람이 원을 이루면서 앉아있고 양의 정수 K가 주어졌을 때 순서대로 K번째 사람을 제거하면서 순열에 넣었을 때 해당 순열을 구하는 문제.
문제 풀이
간단히 연결리스트를 만들고 k번째 요소를 제거하면서 Stringbuilder 에 추가해줬다.
처음에는 iterator를 사용하려고 했으나 파이썬 리스트와는 다르게 해당 클래스는 지정된 리스트의 요소 이후의 색인은 따로 지원하지 않는다.
// 요세푸스_문제 1158
// 풀이
// 간단히 연결 리스트를 만들고 k 번째 요소를 제거하면서 sb에 추가.
// 단. Java는 파이썬과는 다르게 index를 따로 지정해줘야함.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws IOException {
//Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int k = Integer.parseInt(input[1]);
StringBuilder sb = new StringBuilder();
sb.append('<');
// LinkedList와 ListIterator 사용.
LinkedList<Integer> lnkList = new LinkedList<>();
// LinkedList 초기화
for (int i = 1; i <= n; i++) {
lnkList.add(i);
}
int index = 0;
while (lnkList.size() > 1) {
index = (index + k - 1) % lnkList.size(); // index 따로 체킹
sb.append(lnkList.remove(index)).append(", ");
}
sb.append(lnkList.remove()).append('>');
System.out.println(sb.toString());
br.close();
}
}
3 7 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int k = Integer.parseInt(input[1]);append() 중복 가능sb.append(lnkList.remove()).append('>');