자바로 백준 2346 풀기

hong030·2023년 9월 27일
0
  • 실버 3단계 난이도

풀이)
풍선에는 음수와 양수 모두 존재하기 때문에 움직임의 방향이 두 가지이다.
양수가 나온다면 해당 숫자(num)만큼 움직이면서 앞에 있는 값을 다시 뒤로 갱신해준다.

음수가 나오면 반대방향으로 뒤에 있는 풍선들을 앞으로 갱신해주면 된다.

내 코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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));
		int n = Integer.parseInt(br.readLine());
		
		Deque<int[]> q = new ArrayDeque<>();
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int[] arr = new int[n];
		for(int i=0; i<n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		StringBuilder sb = new StringBuilder();
		sb.append("1 ");
		int in = arr[0];
		
		for(int i=1; i<n; i++){
			q.add(new int[] {(i+1), arr[i]}); // {풍선 idx, 내용}
		}
		
		while(!q.isEmpty()) {
			// 양수인 경우 
			if(in >0) {
				// 순서 뒤로 돌리기 
				for(int i=1; i<in; i++) {
					q.add(q.poll());
				}
				
				int[] nxt = q.poll();
				in = nxt[1];
				sb.append(nxt[0]+" ");
			}
			// 음수인 경우 
			else {
				for(int i=1; i<-in; i++	) {
					q.addFirst(q.pollLast());
				}
				
				int[] nxt = q.pollLast();
				in = nxt[1];
				sb.append(nxt[0]+" ");
			}
		}
				
		System.out.println(sb.toString());
		
	}
}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글