파게로그

[백준 2346번] 풍선 터뜨리기 본문

콤퓨타 왕왕기초/PS

[백준 2346번] 풍선 터뜨리기

파게 2021. 4. 13. 05:52

문제 링크: 2346번 제목

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

 

풍선에 적힌 값을 나열한, 크기가 n인 배열 balloons를 선언한다.

 

i가 n-1인 이유: 처음에 첫 풍선을 처리했기 때문

j의 의미: 풍선에 쓰인 숫자(num)만큼 cur을 옮기는데, 터진 풍선은 실제로는 이동하지 않은 것이기에 j를 통해서 실제 이동한 횟수를 세어준다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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(new StringTokenizer(br.readLine()).nextToken());
        int[] balloons = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++)
            balloons[i] = Integer.parseInt(st.nextToken());

        StringBuilder answer = new StringBuilder();
        answer.append(1).append(' ');

        int cur = 0;
        int num = balloons[0];
        balloons[0] = 0; // 터진 풍선
        for (int i = 0; i < n-1; i++) {
            if (num >= 0) {
                for (int j = 0; j < num;) {
                    cur++;
                    cur %= n;
                    if (balloons[cur] != 0)
                        j++;
                }
            } else {
                for (int j = 0; j < num * -1;) {
                    cur--;
                    while (cur < 0)
                        cur += n;
                    if (balloons[cur] != 0)
                        j++;
                }
            }

            num = balloons[cur];
            balloons[cur] = 0;
            answer.append(cur+1).append(' ');
        }

        System.out.print(answer);
    }
}

 

Comments