문제 해석
- 첫번째 줄에는 풍선의 개수(N)를 입력받고, 입력받은 풍선의 개수만큼 다음 차례에 터트릴 풍선의 위치(상대 값 ; 이동 값)을 입력받는다.
- 입력받은 이동 값들 순서대로 터트리는데 이때 터트린 풍선의 위치(절대 값)을 출력하면 된다. (처음 터트리는 풍선이 첫번째 풍선(1번)이다.
- 말로만 설명했을 땐 한번에 이해하기 어려울 수 있는데 쉽게 설명하자면 아래의 사진과 같다.
코드
import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Deque<Balloon> queue = new ArrayDeque<>();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] balloonLocation = new int[N];
for (int i = 0; i < N; i++) {
balloonLocation[i] = Integer.parseInt(st.nextToken());
}
br.close();
sb.append("1 ");
int moveValue = balloonLocation[0];
for(int i = 1; i < N; i++){
queue.add(new Balloon(i+1, balloonLocation[i]));
}
while(!queue.isEmpty()){
if(moveValue > 0){
for(int i = 1; i < moveValue; i++){
queue.add(queue.poll());
}
Balloon next = queue.poll();
moveValue = next.numValue;
sb.append(next.index+" ");
}
else{
for(int i = 1; i < -moveValue; i++){
queue.addFirst(queue.pollLast());
}
Balloon next = queue.pollLast();
moveValue = next.numValue;
sb.append(next.index+" ");
}
}
System.out.println(sb);
}
}
class Balloon{
int index;
int numValue;
public Balloon(int index, int numValue) {
this.index = index;
this.numValue = numValue;
}
}
결과
느낀 점
- 양수, 음수 판별해서 방향을 바꾸는 것에 꽤 많이 애를 먹었다.
- 그리고 한쪽으로만 나갈 수 있게끔 하려다가 돌파구를 찾지 못해서 다른 분들의 코드를 보고 양쪽으로 뽑는 것을 확인하여 그렇게 코드를 작성해서 겨우... 풀어냈다. (진짜... 요즘 알고리즘에 소홀히해서 그런지 쉽게 풀 수 있는 문제도 어렵게 느껴지는 것 같다...)
큰 도움이 되었습니다, 감사합니다.