Deque 를 이용해서 풀었습니다.
Deque 객체를 생성할 때 구현체를 LinkedList 로 하니 메모리 초과가 발생합니다.
LinkedList 가 아닌 ArrayDeque 로 생성해줘야 합니다.
풍선의 인덱스와 다음에 터트릴 풍선으로 가는 이동 횟수를 저장하기 위해 풍선 클래스를 생성해
풍선 객체를 Deque 의 요소로 갖게 했습니다. 가장 먼저 터트리는 풍선을 미리 꺼내서 풍선 인덱스를 StringBuiler 에
추가하고 이동 횟수를 초기화시킵니다. 이동 횟수가 양수면 앞에 요소를 빼서 뒤에 추가하고 음수면 뒤에 요소를 빼서
앞에 추가합니다. 이동 횟수만큼 이동했을 때는 Deque 에 추가하지 않고 풍선 인덱스를 StringBuiler 에 추가하고
이동 횟수를 초기화시킵니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class p2346 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
Deque<Balloon> q = new ArrayDeque<>();
for(int i=1; i< n+1; i++) {
q.offerLast(new Balloon(i, Integer.parseInt(st.nextToken())));
}
Balloon balloon = q.pollFirst();
sb.append(balloon.index +" ");
int nextBalloon = balloon.paperNum;
while (!q.isEmpty()){
if(nextBalloon > 0) {
for(int j=0; j<nextBalloon-1; j++){
q.offerLast(q.pollFirst());
}
balloon = q.pollFirst();
sb.append(balloon.index +" ");
nextBalloon = balloon.paperNum;
} else {
for(int j=0; j<Math.abs(nextBalloon)-1; j++){
q.offerFirst(q.pollLast());
}
balloon = q.pollLast();
sb.append(balloon.index +" ");
nextBalloon = balloon.paperNum;
}
}
System.out.println(sb);
}
static class Balloon {
int index;
int paperNum;
public Balloon(int index, int paperNum) {
this.index = index;
this.paperNum = paperNum;
}
}
}
'Baekjoon' 카테고리의 다른 글
[백준] 2161번 - 카드1 - Java (0) | 2022.12.15 |
---|---|
[백준] 1934번 - 최소공배수 - Java (0) | 2022.12.15 |
[백준] 2577번 - 숫자의 개수 - Java (0) | 2022.12.12 |
[백준] 11286번 - 절댓값 힙 - Java (0) | 2022.12.11 |
[백준] 4153번 - 직각삼각형 - Java (0) | 2022.12.11 |
댓글