본문 바로가기

알고리즘/백준

[JAVA]백준_2346_풍선터뜨리기

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

 

2346번: 풍선 터뜨리기

첫째 줄에 자연수 N(1≤N≤1,000)이 주어진다. 다음 줄에는 차례로 각 풍선 안의 종이에 적혀 있는 수가 주어진다. 편의상 0은 적혀있지 않다고 가정하자.

www.acmicpc.net

문제 유형 : 구현, 자료구조, 덱

풀이방식 : 문제 유형에는 자료구조, 덱이라 표기되었지만 while문으로 구현

소스코드 

package BOJ;

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

public class BOJ_2346_풍선터뜨리기_Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		int[] arr = new int[N];
		boolean[] visited = new boolean[N];
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		for (int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		StringBuilder sb = new StringBuilder();
		int now_idx=0, now_val=0, cnt=0;
loop:	while(true) {
			visited[now_idx]=true;
			sb.append((now_idx+1)+" ");
			cnt++;
			if(cnt==N) break loop;
			int val_cnt=0;
			now_val = arr[now_idx];
			if(now_val > 0) {
				while(true) {
					now_idx++;
					if(now_idx==N) now_idx=0;
					if(!visited[now_idx]) {
						val_cnt++;
						if(val_cnt==now_val) break;
					}
				}
			}else {
				now_val = Math.abs(now_val);
				while(true) {
					now_idx--;
					if(now_idx==-1) now_idx=N-1;
					if(!visited[now_idx]) {
						val_cnt++;
						if(val_cnt==now_val) break;
					}
				}
			} 
		}
		System.out.println(sb);
	}

}

 

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_19564_반복  (0) 2020.08.14
[JAVA]백준_18511_큰 수 구성하기  (0) 2020.08.14
[JAVA]백준_1719_택배  (1) 2020.08.13
[JAVA]백준_10836_여왕벌  (0) 2020.08.12
[JAVA]백준_10282_해킹  (0) 2020.08.12