문제 : 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 |