import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nums = br.readLine().split(" ");
int N = Integer.parseInt(nums[0]);
int K = Integer.parseInt(nums[1]);
Deque<Integer> deq = new ArrayDeque<>();
for(int i = 1; i <= N; i++) {
deq.addLast(i);
}
//데이터가 5000개 이므로 StringBuilder 사용
StringBuilder sb = new StringBuilder();
sb.append("<");
//덱이 빌 때까지 반복
while(!deq.isEmpty()) {
for(int i = 0; i < K-1; i++) {
// 덱의 맨 앞 카드를 제거해 제일 뒤에 삽입(K-1번 반복)
int target = deq.removeFirst();
deq.addLast(target);
}
//K번째에서는 제거만 하고 다시 넣어주지 않음
sb.append(deq.removeFirst() + ", ");
}
sb.replace(sb.length()-2,sb.length(),"");
sb.append(">");
System.out.println(sb.toString());
}
}
자료 갯수가 5000개까지이므로, 시간을 고려해 StringBuilder로 선언해 문자열로 합친 후 한번에 print
<a, b, c, d, e>로 출력이 되어야 하는데 중간에 sb.append(문자열 + “, “); 코드 때문에
<a, b, c, d, e, >로 출력됨
→ sb.replace() 메서드로 sb문자열의 끝-2번째부터 제일 끝 인덱스까지의 문자열을 공백으로 대체
아쉬운 점. sb.replace코드가 너무 지저분함.. trim으로 제일 마지막부분을 깔끔하게 자를 수 있는방법이 있는지, 아니면 sb.append의 선언순서를 바꾸는 등 로직을 수정할 필요가 있을 것 같다.