[백준/Java] 2805 나무 자르기

2023. 1. 29. 20:31· Koala - 9기/코딩테스트 준비 스터디
목차
  1. 문제 분석
  2. 문제 풀이

문제 분석

완전탐색으로 풀기에는 M의 크기와 N의 크기를 곱했을 때 21억을 넘어감으로 불가능하다. 따라서 시간을 최적화해야 되는데, 이분탐색을 적용했다. 절단기의 높이가 0부터 주어진 나무의 최대값까지 선형적으로 있다고 가정하고, 절단기의 높이를 이분탐색을 통해 찾는다.

중간점검을 진행할 때, 절단된 높이의 합과 M의 길이를 비교하여 다음과 같이 min값과 max 값을 변경한다.

  • 절단된 높이의 합이 M보다 크거나 같은 경우: min 값을 mid + 1로 갱신
  • 절단된 높이의 합이 M보다 작은 경우: max 값을 mid - 1로 갱신

 

주의할 점은 절단된 높이의 합은 int를 초과할 수 있으므로 long으로 선언해줘야 한다.

 

문제 풀이

import java.util.Scanner;

public class Main {

    static int N, M, min, max, mid;
    static int[] lengthOfTrees;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        lengthOfTrees = new int[N];

        for (int i = 0; i < N; i++) {
            lengthOfTrees[i] = sc.nextInt();
            max = Math.max(lengthOfTrees[i], max);
        }

        findMaxHeight();

        System.out.println(max);
    }

    public static void findMaxHeight() {
        while (min <= max) {
            long sumOfCutTree = 0;
            mid = (min + max) / 2;

            for (int i = 0; i < N; i++) {
                if (lengthOfTrees[i] > mid) {
                    sumOfCutTree += lengthOfTrees[i] - mid;
                }
            }

            if (sumOfCutTree >= M) {
                min = mid + 1;
            } else {
                max = mid - 1;
            }
        }
    }
}
저작자표시 (새창열림)

'Koala - 9기 > 코딩테스트 준비 스터디' 카테고리의 다른 글

[백준/Python] 14620 꽃길  (0) 2023.01.31
백준[23327] 리그전 오브 레전드 (Python3)  (0) 2023.01.30
[백준/python] 10816번 숫자 카드 2  (0) 2023.01.29
[백준/C++] 2110번 공유기 설치  (0) 2023.01.28
[백준/Python] 11663 선분위의 점  (0) 2023.01.26
  1. 문제 분석
  2. 문제 풀이
'Koala - 9기/코딩테스트 준비 스터디' 카테고리의 다른 글
  • [백준/Python] 14620 꽃길
  • 백준[23327] 리그전 오브 레전드 (Python3)
  • [백준/python] 10816번 숫자 카드 2
  • [백준/C++] 2110번 공유기 설치
KauKoala
KauKoala
항공대 알고리즘 동아리 Koala 🥰
Koala항공대 알고리즘 동아리 Koala 🥰
KauKoala
Koala
KauKoala
전체
오늘
어제
  • 분류 전체보기 (1889)
    • 공지 게시판 (10)
    • 정보 게시판 (8)
    • Codeforce (15)
    • acm-icpc (6)
    • Koala - 1기 (16)
    • Koala - 2기 (111)
      • Programming Contest (1)
      • A반 (20)
      • B반 (39)
      • C반 (22)
      • 기초 강의 (18)
    • Koala - 3기 (10)
      • 기초 스터디 (7)
    • Koala - 4기 (67)
    • Koala - 5기 (144)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (68)
    • Koala - 6기 (102)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (25)
      • 모의 테스트 스터디 (1)
    • Koala - 7기 (167)
      • 기초 알고리즘 스터디 (97)
      • 코딩테스트 준비 스터디 (68)
      • 모의 테스트 스터디 (1)
    • Koala - 8기 (44)
      • 기초 알고리즘 스터디 (32)
      • 코딩테스트 준비 스터디 (10)
      • 코드포스 버츄얼 스터디 (0)
      • 프로그래머스 LV2 스터디 (0)
    • Koala - 9기 (205)
      • 기초 알고리즘 스터디 (138)
      • 코딩테스트 준비 스터디 (64)
      • 모의테스트 준비 스터디 (1)
    • Koala - 10기 (117)
      • 기초 알고리즘 스터디 (30)
      • 코딩테스트 준비 스터디 (86)
      • 모의테스트 준비 스터디 (1)
    • Koala - 11기 (151)
      • 기초 알고리즘 스터디 (46)
      • 코딩테스트 준비 스터디 (104)
      • 모의테스트 준비 스터디 (1)
    • Koala - 12기 (86)
      • 기초 알고리즘 스터디 (31)
      • 코딩테스트 준비 스터디 (55)
    • Koala - 13기 (119)
      • 기초 알고리즘 스터디 (52)
      • 코딩테스트 준비 스터디 (67)
    • Koala - 14기 (116)
      • 기초 알고리즘 스터디 (39)
      • 코딩테스트 준비 스터디 (77)
    • Koala - 15기 (138)
      • 기초 알고리즘 스터디 (73)
      • 코딩테스트 준비 스터디 (65)
    • Koala - 16기 (47)
      • 코딩테스트 기초 스터디 (16)
      • 코딩테스트 심화 스터디 (31)
    • Koala - 17기 (62)
      • 코딩테스트 기초 스터디 (15)
      • 코딩테스트 심화 스터디 (47)
    • Koala - 18기 (31)
      • 코딩테스트 기초 스터디 (11)
      • 코딩테스트 심화 스터디 (20)
    • Koala - 19기 (43)
      • 코딩테스트 기초 스터디 (7)
      • 코딩테스트 심화 스터디 (36)
    • Koala - 20기 (0)
      • 코딩테스트 기초 스터디 (0)
      • 코딩테스트 심화 스터디 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 🐨항공대 알고리즘 학회 Koala 3기 모집
  • 🐨항공대 알고리즘 학회 Koala 2기 모집
  • 소모임 소개

인기 글

태그

  • BFS
  • 백트래킹
  • dfs
  • 백준
  • dp
  • BOJ
  • 파이썬
  • C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
KauKoala
[백준/Java] 2805 나무 자르기
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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