Notice
반응형
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Stack
- 문제풀이
- Algorithms
- 응용SW
- 이클립스
- react
- 정처산기
- SQL
- script
- 책추천
- googleChart
- npm
- IntelliJ
- jsp
- 수학
- 에라토스테네스의 체
- TSX
- BREW
- input
- Oracle
- HashMap
- js
- 백준
- html
- java
- 자료구조
- Eclipse
- set
- node
- deque
Archives
- Today
- Total
개발하자
[백준][Java] 2346번 풍선 터뜨리기 본문
728x90
안녕하세요 :)
적어도 하루 1개 이상 알고리즘 문제를 해결하려 노력하고 있습니다.
혼자 해결 가능한 문제도 있고, 어려웠던 문제도 있던 차라 복습하고자 글을 써 내려갑니다.
백준 2346 풍선 터뜨리기
이 문제는 풍선에 적힌 숫자에 따라 양방향으로 이동하며 풍선을 터뜨리는 시뮬레이션 문제입니다.
📘 문제
💡 해결 방법
풍선의 번호와 이동할 값을 같이 저장해야 하므로 int[] 배열을 사용합니다. (번호, 이동값)
풍선들을 Deque(덱)에 넣고, 풍선을 터뜨리면서 이동값에 따라 덱을 회전시킵니다.
이동값이 양수일 경우 덱을 앞으로, 음수일 경우 덱을 뒤로 회전합니다.
✅ 풀이 및 설명 (설명은 더보기 클릭)
더보기
- int[] 배열로 번호와 이동값을 같이 저장했습니다.
- move가 양수이면 오른쪽으로, 음수이면 왼쪽으로 회전합니다.
- move > 0일 때는 (move - 1)번 이동해야 하고, move < 0일 때는 move번 이동해야 합니다.
- 풍선을 터뜨릴 때마다 번호를 출력합니다.
import java.io.*;
import java.util.*;
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));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
Deque<int[]> deque = new ArrayDeque<>();
// 풍선 번호와 이동 값을 같이 저장
for (int i = 1; i <= n; i++) {
deque.offer(new int[]{i, Integer.parseInt(st.nextToken())});
}
while (!deque.isEmpty()) {
int[] balloon = deque.pollFirst();
int move = balloon[1];
bw.write(balloon[0] + " "); // 풍선 번호 출력
if (deque.isEmpty()) break; // 풍선이 모두 터졌으면 종료
if (move > 0) {
// 오른쪽으로 move-1번 이동
for (int i = 1; i < move; i++) {
deque.offerLast(deque.pollFirst());
}
} else {
// 왼쪽으로 move번 이동
for (int i = 0; i < Math.abs(move); i++) {
deque.offerFirst(deque.pollLast());
}
}
}
bw.flush();
bw.close();
br.close();
}
}
이번 문제는 덱을 활용하여 순서를 조정하는 시뮬레이션 문제였습니다.
덱을 사용하면 양쪽 끝에서 데이터를 빠르게 추가하거나 삭제할 수 있기 때문에 이런 회전이 필요한 문제에서 매우 유용합니다.
이 문제를 통해 덱 회전 로직과 조건에 따른 분기 처리를 연습할 수 있습니다.
공부하면서 유용했던 부분 메모 겸 공유하고자 끄적입니다.
고쳐야 하는 부분 있다면 댓글 남겨주시면 수정하겠습니다.
행복한 하루 보내세요 (❁´◡`❁)
728x90
반응형
'Algorithms > Baekjoon' 카테고리의 다른 글
[백준][Java] 15439번 베라의 패션 (1) | 2025.04.28 |
---|---|
[백준][Java] 24511번 queuestack (5) | 2025.04.26 |
[백준][Java] 28279번 덱 2 (0) | 2025.04.26 |
[백준][Java] 11866번 요세푸스 문제 0 (1) | 2025.04.26 |
[백준][Java] 2164번 카드2 (0) | 2025.04.26 |