[백준] 2346 풍선 터뜨리기 - Java

2023. 12. 10. 14:29· Algorithm/백준 문제풀이
목차
  1. 문제 출저
  2. 문제 풀이
  3. 소스 코드

 

 

 

 

문제 출저

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

 

2346번: 풍선 터뜨리기

1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선

www.acmicpc.net

 

 

 

문제 풀이

 풍선의 갯수와 풍선 안에 숫자가 주어집니다. 

풍선 안에 숫자는 양수와 음수로 양수면 오른쪽부터 세고, 음수면 왼쪽으로 셉니다. 

셈을 마친 풍선을 터뜨리고 해당 풍선의 숫자만큼 반복합니다.

1번부터 풍선을 터뜨렸을 때, 어떤 순서로 풍선들이 터지는지 구해야 합니다. 

 

Deque를 이용해 문제를 풀었습니다. 

양수인 경우 해당 숫자만큼 처음에서 빼서 끝에 넣었습니다. (오른쪽 이동 표현)

음수인 경우 해당 숫자만큼 마지막에서 빼서 처음에 넣었습니다. (왼쪽 이동 표현)

정답을 List에 담아 출력했습니다. 

 

 

 

소스 코드

package baekjoon.backjoon12.day0110.day10;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/*
풍선 터뜨리기
https://www.acmicpc.net/problem/2346
 */

public class B2346 {

  static int n;
  static Deque<Ballon> ballons;

  public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    n = Integer.parseInt(br.readLine());

    ballons = new ArrayDeque<>();

    StringTokenizer st = new StringTokenizer(br.readLine());
    for(int i = 0; i < n; i++) {
      int index = i+1;
      int number = Integer.parseInt(st.nextToken());

      ballons.addLast(new Ballon(index, number));
    }

    List<Integer> answer = new ArrayList<>();
    Ballon ballon = ballons.poll();
    answer.add(ballon.index);
    int number = ballon.number;

    while(!ballons.isEmpty()) {
      if(number > 0) {
        int count = number - 1;
        while(count-- > 0) {
          ballons.addLast(ballons.pollFirst());
        }
        ballon = ballons.pollFirst();
        answer.add(ballon.index);
        number = ballon.number;
      }
      else if(number < 0) {
        int count = (number * -1) -1;
        while(count-- > 0) {
          ballons.addFirst(ballons.pollLast());
        }
        ballon = ballons.pollLast();
        answer.add(ballon.index);
        number = ballon.number;
      }
    }

    for(int data : answer) {
      System.out.print(data + " ");
    }

  }

  public static class Ballon {
    int index;
    int number;

    Ballon(int index, int number) {
      this.index = index;
      this.number = number;
    }

  }

}
  1. 문제 출저
  2. 문제 풀이
  3. 소스 코드
'Algorithm/백준 문제풀이' 카테고리의 다른 글
  • [백준] 1935 후위 표기식2 - Java
  • [백준] 5076 Web Pages - Java
  • [백준] 7490 0 만들기 - Java
  • [백준] 1722 순열의 순서 - Java
너지살
너지살
너지살
너지살개발자
너지살
전체
오늘
어제
  • 분류 전체보기 (375)
    • 잡식 (2)
      • 티스토리 (2)
    • 개발 일지 (0)
      • OMS 프로젝트 (4)
      • 우테코 6기 프리코스 (1)
    • Git (2)
    • JAVA (15)
      • Java 공부 (6)
      • 자료구조 (4)
      • 도움되는 메모 (4)
    • DevOps (18)
      • AWS (6)
      • Docker (2)
      • Jenkins (1)
      • Nginx (1)
      • Kafka (6)
      • RabbitMQ (2)
    • Spring, Spring Boot (16)
      • Test Code (1)
      • AOP (2)
      • Batch (3)
      • Cache - Redis (5)
      • Cloud Config - 설정 파일 관리 (3)
      • 성능 측정 (1)
      • 예외 처리 (1)
    • BackEnd (1)
      • Spring 공부 (1)
      • Thymeleaft (0)
    • DB (17)
      • JPA (2)
      • DB 공부 (3)
      • DB 포스팅 (4)
      • DB 답장 (1)
      • MySQL (2)
      • Redis (5)
      • MongoDB (0)
    • CS (8)
      • Spring (4)
      • DataBase (3)
      • Java (1)
    • Algorithm (203)
      • 알고리즘 개념 (5)
      • 정렬 알고리즘 (11)
      • 프로그래머스 문제풀이 (18)
      • 백준 문제풀이 (165)
      • 소프티어 문제풀이 (3)
      • 알고리즘 시험 정리 (1)
    • SQL (0)
      • 문법 (1)
      • 프로그래머스 문제풀이 (52)
      • 리트코드 문제풀이 (19)
    • IT (1)
      • IT 공부 (1)
    • 정리 (10)
      • 질문 정리 (10)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Java 정리
  • 깊이/너비 우선탐색
  • 유니온파인드
  • Bitmast
  • two pointer
  • docker
  • 우선수위큐
  • 소프티어
  • DFS
  • 자료구조
  • Java
  • dynamic programing
  • Spring Boot
  • 최소 스패닝 트리
  • 크루스칼 알고리즘
  • Spring Boot Redis 연결
  • cache
  • git
  • 경로표현식
  • Next permutation
  • dynamiceprogramming
  • redis
  • Test code
  • 질문 정리
  • 그래프 탐색
  • 최소 신장 트리
  • 두 포인터
  • 다이나믹프로그래밍
  • db
  • 분리 집합
  • 외판원 순회 문제
  • 투포인트
  • 다음 순열 찾기
  • 비트마스킹
  • 데이터베이스
  • Sorting algorithm
  • 백준
  • 투 포인터
  • Spring Batch
  • 병렬 처리
  • 알고리즘
  • JPA
  • DP
  • Algorithm
  • MST
  • 다이나믹 프로그래밍
  • 설정
  • Union-Find
  • 부분탐색
  • 그래프 이론

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
너지살
[백준] 2346 풍선 터뜨리기 - Java
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.