[백준] 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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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