[백준 1094번 문제, JAVA] 막대기

2023. 3. 3. 15:09·정리 전 게시글/공부 관련

문제

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대를 만들려고 한다.

막대를 자르는 가장 쉬운 방법은 절반으로 자르는 것이다. 지민이는 아래와 같은 과정을 거쳐서 막대를 자르려고 한다.

  1. 지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다.
    1. 가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다.
    2. 만약, 위에서 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 X보다 크거나 같다면, 위에서 자른 막대의 절반 중 하나를 버린다.
  2. 이제, 남아있는 모든 막대를 풀로 붙여서 Xcm를 만든다.

X가 주어졌을 때, 위의 과정을 거친다면, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 있는지 구하는 프로그램을 작성하시오. 


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    private static final int STICK = 64;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        List<Stick> brokenSticks = new ArrayList<>();
        Stick stick = new Stick(STICK);

        while (true) {
            int sum = 0;

            for (Stick s : brokenSticks) {
                sum += s.getLength();
            }
            if (sum == n) {
                break;
            } else if (sum + stick.getLength() <= n) {
                brokenSticks.add(stick);
            }
            stick = stick.broken();


        }
        System.out.println(brokenSticks.size());
    }

    static class Stick {
        Stick s;
        int length;
        public Stick(int length) {
            this.length = length;
        }

        public Stick broken() {
            this.s = new Stick(length/2);
            return this.s;
        }

        public int getLength() {
            return length;
        }


    }
}

해결


참고

링크

 

 

 

저작자표시 (새창열림)

'정리 전 게시글 > 공부 관련' 카테고리의 다른 글

자료구조와 알고리즘 학습 노트 기초 (1) 자료구조와 알고리즘  (0) 2023.03.04
윤년 구하는 함수  (0) 2023.03.03
[백준 1026번 문제, JAVA] 보물  (0) 2023.03.02
[JAVA 자바] 숫자 자릿수 구하는 코드 방법 2가지 n번째 숫자 구하기  (0) 2023.03.01
자바 TCP/IP 소켓 통신 서버, 클라이언트 만들기 코드  (0) 2023.03.01
'정리 전 게시글/공부 관련' 카테고리의 다른 글
  • 자료구조와 알고리즘 학습 노트 기초 (1) 자료구조와 알고리즘
  • 윤년 구하는 함수
  • [백준 1026번 문제, JAVA] 보물
  • [JAVA 자바] 숫자 자릿수 구하는 코드 방법 2가지 n번째 숫자 구하기
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (279)
      • 논문 (0)
      • Roboracer (2)
      • 개발 아무거나 (1)
      • 일상 아무거나 (2)
      • 정리 전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리반응형2스킨편집
    C언어
    C++강좌
    콜라츠추측
    빅데이터공모전
    티스토리스킨편집
    파이썬
    백준
    마크스크립트
    자바
    일본규슈공업대학교
    이것이자바다확인문제
    마인크래프트스크립트
    반복하지않는수
    파이어베이스
    컨텍스트스위칭
    C언어강좌
    안드로이드
    마인크래프트
    캡스톤디자인
    이것이자바다
    마크
    c언어초보
    프로그래머스PCCE
    티스토리HTML
    프로그래머스
    스크롤바CSS
    이것이자바다연습문제
    마인크래프트강화스크립트
    공개SW개발자대회
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[백준 1094번 문제, JAVA] 막대기
상단으로

티스토리툴바