작성 코드
import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
Queue<Integer> que = new LinkedList<>();
for (int i = 1; i <= n; i++) {
que.offer(i);
}
StringBuilder sb = new StringBuilder();
sb.append("<");
while (!que.isEmpty()) {
for (int i = 1; i < k; i++) {
que.offer(que.poll());
}
sb.append(que.poll());
if (!que.isEmpty()) {
sb.append(", ");
}
}
sb.append(">");
System.out.println(sb.toString());
}
}
StringBuilder sb = new StringBuilder();
sb.append("<");
StringBuilder
자바에서 문자열을 효율적으로 다루기 위한 클래스
문자열을 자주 변경하거나 수정해야 할 경우, StringBuilder를 사용하는 것이 성능 면에서 유리
결과를 담을 StringBuilder 선언 후 "<" 추가
while (!que.isEmpty()) {
// 큐에서 k-1번만큼 앞의 사람들을 뒤로 보내기
for (int i = 1; i < k; i++) {
que.offer(que.poll());
}
// k번째 사람을 제거하고 sb에 넣기
sb.append(que.poll());
// 큐에 다음 사람이 남아있으면 ", " 추가
if (!que.isEmpty()) {
sb.append(", ");
}
}
큐가 비어있지 않은 동안, while문을 반복한다.입력값이 7 3 일 때 k는 3이므로, for문은 k-1인 2번을 돌게된다.첫번째 값을 꺼내(que.poll()) 맨 뒤에 삽입한다. (que.offer))
처음 큐
[1, 2, 3, 4, 5, 6, 7]
첫번째 for문 종료 후 큐
[3, 4, 5, 6, 7, 1, 2]
이런 모습이 된다.
그 후 스트링버퍼에 큐의 첫번째 값을 꺼내 삽입한다.
큐 내에 숫자가 남아 있다면 ", " 삽입
큐가 빌 때까지 반복 후 종료.
sb.append(">");
System.out.println(sb.toString());
while문이 종료되면 ">" 추가 후 결과 출력
'백준' 카테고리의 다른 글
[백준 1100] 하얀 칸 JAVA (0) | 2024.11.27 |
---|---|
[백준 1008] A/B JAVA - BigDecimal 사용 (2) | 2024.11.18 |
[백준 10988] 팰린드롬인지 확인하기 (0) | 2024.11.11 |
[백준 1157] 단어 공부 JAVA - LinkedHashSet, HashMap 사용 (2) | 2024.11.09 |
[백준 1316] 그룹 단어 체커 JAVA - 데크(Deque) 사용 (0) | 2024.11.08 |