[이분탐색] 백준 #2805 나무 자르기 - Python

2024. 5. 3. 14:00· Algorithm/Baekjoon
목차
  1. 🗂️ 문제
  2. 💡 접근법
  3. 😎 내 코드
  4. ✅ 정답 확인

🗂️ 문제

링크: https://www.acmicpc.net/problem/2805

 

💡 접근법

N과 M의 범위가 크기 때문에 모든 경우의 수를 계산할 경우 시간초과가 발생한다.

 

절단 높이를 작게하면 가져가는 나무의 길이가 크고, 절단 높이를 크게하면 가져가는 나무 길이기 작다.

이를 이용하여 절단 높이를 기준으로 이분 탐색을 수행한다.

 

또한 절단 높이를 최대로 하여 필요한 만큼의 나무를 가져가므로, 나무의 길이가 딱 떨어지지 않는 경우를 생각해야 한다. 이 경우엔 high(mid-1) 값을 출력하면 필요한 만큼 나무를 가져가면서 최대로 하는 절단 높이를 구할 수있다.

 

😎 내 코드

import sys

N, M = map(int, sys.stdin.readline().split())
tree = list(map(int, sys.stdin.readline().split()))

def cal_tree(height):
    sum = 0
    for t in tree:
        if t-height > 0:
            sum += t - height
    return sum

low = 0
high = max(tree)
while (low <= high):
    mid = (low+high) // 2 # 절단 높이
    tree_height = cal_tree(mid) # 가져가는 나무 길이

    if tree_height == M:
        print(mid)
        break
    else:
        if tree_height < M:
            high = mid - 1
        elif tree_height > M:
            low = mid + 1

if low > high:  # 나무 길이기 딱 떨어지지 않는 경우
    print(high)

 

✅ 정답 확인

'Algorithm > Baekjoon' 카테고리의 다른 글

[DP] 백준 #11726 2xn 타일링 - Python  (0) 2024.05.05
[이분탐색] 백준 #1654 랜선 자르기 - Python  (1) 2024.05.03
[DP] 백준 #9095 1, 2, 3 더하기 - Python  (0) 2024.04.09
[DP] 백준 #2579 계단오르기 - Python  (0) 2024.04.06
[DP] 백준 #24416 알고리즘 수업 - 피보나치 수 1 - Python  (0) 2024.04.03
  1. 🗂️ 문제
  2. 💡 접근법
  3. 😎 내 코드
  4. ✅ 정답 확인
'Algorithm/Baekjoon' 카테고리의 다른 글
  • [DP] 백준 #11726 2xn 타일링 - Python
  • [이분탐색] 백준 #1654 랜선 자르기 - Python
  • [DP] 백준 #9095 1, 2, 3 더하기 - Python
  • [DP] 백준 #2579 계단오르기 - Python
jyjyjy25
jyjyjy25
기록하는 습관jyjyjy25 님의 블로그입니다.
jyjyjy25
기록하는 습관
jyjyjy25
전체
오늘
어제
  • 분류 전체보기 (148)
    • Algorithm (87)
      • Baekjoon (59)
      • Programmers (28)
    • Courses (18)
      • Java (3)
      • Spring (11)
      • JPA (4)
    • CS (7)
    • DevOps (8)
      • AWS (8)
    • Framework (10)
      • Spring (5)
      • JPA (5)
    • Security (13)
      • Web Hacking (10)
      • Dreamhack (0)
      • ISMS (3)
    • Research (1)
    • Etc (4)

인기 글

최근 글

hELLO · Designed By 정상우.v4.2.1
jyjyjy25
[이분탐색] 백준 #2805 나무 자르기 - Python
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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