2346 - 풍선 터뜨리기

slee2·2021년 12월 30일
0

백준

목록 보기
16/20

문제

https://www.acmicpc.net/problem/2346

풀이

자료구조 중에서 덱(Deque)을 이용하여 해결이 가능하다.

addFirst() - 맨 앞에 추가한다.
addLast() - 맨 뒤에 추가한다.
peek() - 맨 앞 값을 가져온다.
pollFirst() - 맨 앞 값을 제거하고 그 값을 반환한다.
pollLast() - 맨 마지막 값을 제거하고 그 값을 반환한다.

이를 이용해 앞 뒤를 자유롭게 넣고 꺼낼 수 있으므로

양수일때와 음수일때를 분기처리로 해결이 가능해진다.

import java.util.*;

public class Num2346 {

    public static int N;
    public static Deque<Integer> deque = new ArrayDeque<>();
    public static int Num[];

    public static void main(String[] args) {
        //input
        Scanner scanner = new Scanner(System.in);
        N = Integer.parseInt(scanner.nextLine());
        String[] a = scanner.nextLine().split(" ");
        Num = new int[N + 1];
        for (int i=1; i<=N; i++) {
            Num[i] = Integer.parseInt(a[i-1]);
            deque.addLast(i);
        }

        //logic
        while(true) {
            if (deque.peek() == 1)
                System.out.print(deque.peek());
            else
                System.out.print(" " + deque.peek());
            int paperNum = Num[deque.pollFirst()];
            if (deque.isEmpty())
                break;
            N--;

            if (paperNum > 0) {
                for (int i = 0; i < paperNum - 1; i++) {
                    deque.addLast(deque.pollFirst());
                }
            } else {
                for (int i=paperNum; i < 0; i++) {
                    deque.addFirst(deque.pollLast());
                }
            }
        }
    }
}

0개의 댓글

관련 채용 정보