Skip to content

Commit f7034c5

Browse files
authored
[백준 2346] 풍선 터뜨리기 - 자료구조
1 parent 3bfbd9b commit f7034c5

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

hoseok/week02/Boj2346.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
1 2 3 4 5 1 2 3 4 5 -> 원형 큐 -> 덱 이용
3+
풍선이 순서대로 3 2 1 -3 -1로 존재한다면 일단 덱에 전부 offer함
4+
풍선의 값이 양수라면 앞에서 맨 앞에서 뽑아서 맨 뒤에 삽입 -> 이후 맨 앞의 값을 뽑음
5+
풍선의 값이 음수라면 맨 뒤에서 뽑아서 맨 앞에 삽입 -> 이후 맨 앞의 값을 뽑음
6+
*/
7+
import java.io.*;
8+
import java.util.*;
9+
10+
class Node {
11+
int value, sequence;
12+
Node(int value, int sequence) {
13+
this.value = value;
14+
this.sequence = sequence;
15+
}
16+
}
17+
18+
class Main {
19+
public static void main(String[] args) throws Exception {
20+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
21+
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
22+
int n = Integer.parseInt(br.readLine());
23+
24+
StringTokenizer st = new StringTokenizer(br.readLine());
25+
Deque<Node> dq = new ArrayDeque<>();
26+
27+
for (int i = 1; i <= n; i++) {
28+
dq.offer(new Node(Integer.parseInt(st.nextToken()), i));
29+
}
30+
StringBuilder result = new StringBuilder();
31+
32+
Node node = dq.poll();
33+
result.append("1 ");
34+
35+
while (dq.size() > 1) {
36+
if (node.value > 0) {
37+
38+
for (int i = 0; i < node.value - 1; i++) {
39+
dq.offerLast(dq.pollFirst());
40+
}
41+
node = dq.pollFirst();
42+
43+
} else {
44+
45+
for (int i = 0; i < Math.abs(node.value + 1); i++) {
46+
dq.offerFirst(dq.pollLast());
47+
}
48+
node = dq.pollLast();
49+
50+
}
51+
result.append(node.sequence).append(" ");
52+
}
53+
result.append(dq.poll().sequence);
54+
55+
bw.write(result.toString());
56+
bw.flush();
57+
bw.close();
58+
}
59+
}

0 commit comments

Comments
 (0)