문제
내 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer sz = new StringTokenizer(br.readLine());
int N = sz.hasMoreTokens() ? Integer.parseInt(sz.nextToken()) : 0;
int K = sz.hasMoreTokens() ? Integer.parseInt(sz.nextToken()) : 0;
LinkedList<Integer> list = new LinkedList<>();
int cnt = 0;
while (cnt < N) {
list.add(++cnt);
}
cnt = 0;
StringBuffer sb = new StringBuffer("<");
while (cnt < N) {
for (int i = 1; i < K; i++) {
list.addLast(list.pop());
}
sb.append(list.pop() + ", ");
cnt++;
}
System.out.println(sb.replace(sb.length() - 2, sb.length(), ">"));
}
}
1. LinkedList 만들고 기본값 넣기
LinkedList<Integer> list = new LinkedList<>();
int cnt = 0;
while (cnt < N) {
list.add(++cnt);
}
2. 결과 만들 변수 생성
// cnt : 몇번 제거했는지 카운팅
cnt = 0;
// 결과값 출력할 StringTokenizer
StringBuffer sb = new StringBuffer("<");
3. 결과 도출
// 제거한 숫자가 N과 같아질때까지 반복
while (cnt < N) {
// N이 7이고 K가 3이면
// 1 2 건너뛰고 3 제거,
// 4 5 건너뛰고 6 제거 이런식으로 되어서
// list에서 k-1만큼 건너뛰는 반복문
for (int i = 1; i < K; i++) {
list.addLast(list.pop());
}
// 출력할 결과값에 제거할 숫자 입력
sb.append(list.pop() + ", ");
cnt++; // 제거 후 카운팅 1증가
}