2346번: 풍선 터뜨리기
1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선
www.acmicpc.net
풀이 과정
- 풍선에는 음수와 양수 모두 존재하기 때문에 움직임의 방향이 두가지
- 양수가 나온다면 해당 숫자 만큼 움직이면서 앞에 있는 값을 pollFirst한 후 뒤로 addLast()
- 음수가 나온다면 반대방향으로 뒤에 있는 풍선들을 pollLast한 후 앞으로 addFirst()
- 풍선 번호와 안에 적힌 종이를 HashMap을 통해 처리
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.Deque;
import java.util.ArrayDeque;
import java.util.HashMap;
public 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));
Deque<Integer> deque = new ArrayDeque<>();
HashMap<Integer,Integer> map = new HashMap<>();
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1; i<=n; i++)
{
int paper = Integer.parseInt(st.nextToken());
map.put(i, paper);
deque.add(i); //덱에 풍선 번호 저장
}
while (!deque.isEmpty()) {
int cur = deque.pollFirst();
Integer paper = map.get(cur);
bw.write(cur + " ");
if (paper != null) {
if (paper > 0) {
while (--paper > 0) {
int temp1 = deque.pollFirst();
deque.addLast(temp1);
}
} else {
while (++paper < 0) {
int temp2 = deque.pollLast();
deque.addFirst(temp2);
}
}
}
}
bw.flush();
bw.close();
}
}
- 메모리 초과 뜸....
- 구글링 해보니 deque에 배열형식으로 담아서 처리하는 것을 확인
참고 블로그
[백준_2346번] 풍선 터뜨리기 (tistory.com)
[백준_2346번] 풍선 터뜨리기
https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽
subin-programming.tistory.com
정답
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.Deque;
import java.util.ArrayDeque;
class Balloon {
int idx; //풍선 번호
int paper; //적혀 있는 값
public Balloon(int idx, int paper)
{
this.idx = idx;
this.paper = paper;
}
}
public 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));
Deque<Balloon> deque = new ArrayDeque<>();
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1; i<=n; i++)
{
int paper = Integer.parseInt(st.nextToken());
deque.add(new Balloon(i,paper)); //덱에 풍선 번호 저장
}
while (!deque.isEmpty()) {
bw.write(deque.getFirst().idx+" ");
int cur = deque.pollFirst().paper;
if(deque.isEmpty())
break;
if(cur>0) {
for(int i=0; i<cur-1; i++)
{
deque.addLast(deque.pollFirst());
}
}
else
{
for(int i=0; i<Math.abs(cur); i++)
{
deque.addFirst(deque.pollLast());
}
}
}
bw.flush();
bw.close();
}
}
'Java > 백준' 카테고리의 다른 글
[JAVA] 백준 15439 베라의 패션 (0) | 2024.02.15 |
---|---|
[JAVA] 백준 24511 queuestack (1) | 2024.02.15 |
[JAVA] 백준 28279 덱 2 (0) | 2024.02.14 |
[JAVA] 백준 11866 요세푸스 문제 0 (1) | 2024.02.14 |
[JAVA] 백준 2164 카드 2 (0) | 2024.02.14 |