[BOJ 2346] 백준 풍선 터뜨리기 자바

2024. 7. 21. 15:31· 자료구조 & 알고리즘 관련/자료구조&알고리즘
목차
  1. 코드
  2. 설명
  3. 느낀점

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

 

  • 처음 보자마자, 이건 양방향 연결 리스트를 사용하면 되겠구나 라는 생각이 들었다.

 

코드

import java.io.*;
import java.util.StringTokenizer;

class Balloon {
    public int index;
    public int value;
    public Balloon prev;
    public Balloon next;

    public Balloon(int index, int value) {
        this.index = index;
        this.value = value;
    }
}

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int index = 1;
        Balloon head = new Balloon(index, Integer.parseInt(st.nextToken()));
        Balloon current = head;
        while(st.hasMoreTokens()) {
            Balloon balloon = new Balloon(++index, Integer.parseInt(st.nextToken()));
            balloon.prev = current;
            current.next = balloon;
            current = balloon;
        }

        // 양방향 엮어줘야함
        head.prev = current;
        current.next = head;

        StringBuilder sb = new StringBuilder();
        while (N > 0) {
            sb.append(head.index).append(" ");
            int move = head.value;
            // 제거하기
            head.prev.next = head.next;
            head.next.prev = head.prev;

            N--;
            if (N == 0) break;

            if (move > 0) {
                for (int i = 0; i < move; i++) {
                    head = head.next;
                }
            } else {
                for (int i = 0; i < Math.abs(move); i++) {
                    head = head.prev;
                }
            }
        }
        System.out.println(sb);
    }
}

설명

  • 양방향 연결 리스트를 사용하면 [이전, 이후]를 기억하기 때문에 arrayIndexOutOfBounds 를 피할 수 있다.!
  • 구현은 간단하다.
  • 기준점이 되는 head 노드를 만들어두고, 이 후로 들어오는 노드는 current 노드를 통해 이전 이후를 같이 기록하게 된다.
  • 그 다음 N개의 숫자를 감소시키면서
  • 노드의 인덱스를 stringbuilder에 누적시키면서
  • 현재 노드의 앞 뒤를 연결시켜, 현재 노드를 제거한다.
  • 그리고 이동할 값을 추출해 그만큼 앞, 뒤로 이동하면 된다. (음수, 양수)

 

느낀점

  • 요즘 다시 풀고 있는데, 정말 잘 기억이 안 나서 힘들다.

'자료구조 & 알고리즘 관련 > 자료구조&알고리즘' 카테고리의 다른 글

Queue 2개로 Stack구현하기  (0) 2024.02.03
Stack 두개를 이용하여 Queue구현하기  (0) 2024.02.03
자료구조란?  (0) 2023.12.06
링크드리스트 노드의 구현  (0) 2022.11.28
단방향 링크드리스트 구현  (0) 2022.11.28
  1. 코드
  2. 설명
  3. 느낀점
'자료구조 & 알고리즘 관련/자료구조&알고리즘' 카테고리의 다른 글
  • Queue 2개로 Stack구현하기
  • Stack 두개를 이용하여 Queue구현하기
  • 자료구조란?
  • 링크드리스트 노드의 구현
솜사탕코튼
솜사탕코튼
솜사탕코튼
개발일기
솜사탕코튼
전체
오늘
어제
  • 분류 전체보기 (236)
    • Spring관련 기술 (43)
      • Spring (2)
      • 서버개발 (10)
      • JPA (9)
      • 테스트코드 (22)
      • 인증, 인가 (0)
    • DB관련 (19)
      • 오라클 (1)
      • MySQL (0)
      • 기타 DB (4)
      • DB관련 이슈 (2)
      • REDIS (11)
      • db migration (1)
    • 프로그래밍 언어 (3)
      • 자바 (3)
    • 파이썬 관련 (19)
      • 파이썬 (16)
      • 데이터 사이언스 (3)
    • 네트워크 관련 (4)
      • 네트워크 (4)
    • 배포관련 (32)
      • AWS (26)
      • 도커 (5)
      • 클라우드 정리 (1)
    • 자료구조 & 알고리즘 관련 (53)
      • 자료구조&알고리즘 (6)
      • 코딩테스트 (40)
      • 99클럽 코딩테스트 스터디 6기 (7)
    • CS지식들 (30)
      • 공부공부 (13)
      • CS (17)
    • 프로젝트 (4)
    • 에러일기 (18)
    • 서적 (3)
      • 밑바닥부터 만드는 컴퓨팅 시스템 (3)
    • 깃 & 깃헙 (1)
    • 디자인패턴 (4)
    • 면접질문 (0)
    • kt-aivle (0)
    • 덕질일지 (2)
    • 영어공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 인프런
  • Redis
  • dfs
  • 스프링 부트 - 핵심 원리와 활용
  • 자바
  • Practical Testing: 실용적인 테스트 가이드
  • 나동빈
  • 그래프순회
  • 파이썬
  • 따라하며 배우는 AWS 네트워크 입문
  • 코테
  • 따라하며 배우는 AWS
  • 이것이 코딩테스트다
  • 백준
  • BFS
  • 99클럽
  • queryDSL
  • AWS
  • 10주 완성 알고리즘 코딩테스트
  • 프로그래머스

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
솜사탕코튼
[BOJ 2346] 백준 풍선 터뜨리기 자바
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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