[백준] 2346번 - 원형 큐(Queue) + 배열

팥빵·2025년 11월 10일

Baekjoon

목록 보기
45/49

>>문제 바로가기<<

요세푸스 순열 문제의 응용 버전이다. (백준 11866번)
원형 Queue에서 시계방향, 반시계방향 두 방향을 커버할 수 있는 상황을 고려해야한다.

풍선의 순서와 그 안에 적혀있는 종이의 정수를 같이 기록해야 하므로 배열을 할당한다.

Deque<int[]> q = new ArrayDeque<>();

for(int i=0; i<N; i++){
	q.add(new int[]{i, num});
}

이런 방식의 코드를 사용하면 Queue를 만들고, 그 안을 배열 방식으로 할당할 수 있다.

위 정보를 바탕으로 설계한 코드는 다음과 같다.


import java.util.*;
import java.io.*;

class Main{
	public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        int N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine(), " ");
        Deque<int[]> q = new ArrayDeque<>();
        
        for(int i=1; i<=N; i++){
        	int num = Integer.parseInt(st.nextToken());
            q.add(new int[]{i, num});
        }
        
        int[] balloon = q.pollFirst();
        bw.write(balloon[0] + " ");
        int move = balloon[1];
        
        while(!q.isEmpty(){
        	if(move > 0){
            	for(int i=0; i<move-1; i++){
                	q.addLast(q.pollFirst());
                }
                balloon = q.pollFirst();
            }else{
            	move = -move;
                for(int i=move-1; i>0; i--){
                	q.addFirst(q.pollLast());
                }
                balloon = q.pollLast();
            }
            bw.write(balloon[0] + " ");
            move = balloon[1];
        }
        bw.flush();
        bw.close();
    }
}

맞았습니다!!

profile
반갑습니다

0개의 댓글