728x90
풀이 방법
문제에 처음 접근했을 때는 원형 큐를 생각했다. 그래서 처음 index를 -1로 설정하고, (index + K) % q.size()로 풀려고 했다. 하지만 해당 index의 값을 삭제할 순 없었고, 0으로 설정을 했는데 index가 그대로 남아 0인 부분을 뛰어넘을 수 없어서 답이 나오질 않았다. 다시 생각해보니 큐를 만들고, 제일 앞의 두 개를 뒤로 넘기면 제일 앞에 있는 숫자가 3번째 숫자임을 깨달았다.
1 2 3 4 5 6 7 에서 1 2 를 뒤로 보낸다.
3 4 5 6 7 1 2 에서 poll()을 사용하면 3이 나오게 된다.
4 5 6 7 1 2 에서 또 4 5 를 뒤로 보낸다.
6 7 1 2 4 5 에서 poll()을 사용하면 6이 나오게 된다.
그래서 이 방법을 생각하고 while(!q.isEmpty())를 사용했는데, 출력에서 문제가 생겼다. 왜냐하면 큐가 비어있을 때까지 출력을 하게 되면 마지막 출력 값이 4, > 이런 식으로 나왔다. 그래서 q.size() != 1로 바꾸고, 마지막 데이터는 q.poll() 하고 ">"을 해주었다.
사용 개념
Queue
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package Data_Structure;
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));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
Queue<Integer> q = new LinkedList<>();
int limit = Integer.parseInt(st.nextToken());
int start = Integer.parseInt(st.nextToken());
sb.append("<");
for(int i = 1; i <= limit; i++)
q.offer(i);
while(q.size() != 1){
for(int i = 0; i < start-1; i++){
int num = q.poll();
q.offer(num);
}
sb.append(q.poll() + ", ");
}
sb.append(q.poll() + ">");
System.out.print(sb);
}
}
|
cs |
728x90
'BOJ(Java)' 카테고리의 다른 글
자바(백준) 1182 부분 수열의 합 (0) | 2021.04.26 |
---|---|
자바(백준) 1966 프린터 큐 (0) | 2021.04.08 |
자바(백준) 9012 괄호 (0) | 2021.04.05 |
자바(백준) 10867 중복 빼고 정렬하기 (0) | 2021.04.05 |
자바(백준) 11651 좌표 정렬하기 2 (0) | 2021.04.05 |