https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이분탐색
  • python3
  • 스택
  • 다이나믹 프로그래밍
  • 파이썬
  • 큐
  • Python
  • 이분 탐색
  • 재귀
  • 백트래킹
  • 유클리드호제법
  • DFS
  • 프로그래머스
  • heapq
  • 그래프
  • MST
  • 유니온 파인드
  • LIS
  • 백준
  • 그리디
  • BFS
  • 다이나믹프로그래밍
  • counter
  • 다익스트라
  • 최소힙
  • DP
  • 최단경로
  • 12015
  • 재귀함수
  • 최대공약수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

알고리즘

백준 1654 풀이 (랜선 자르기, parametric search, 파라매트릭 서치)

2021. 3. 21. 20:32

파라매트릭 서치는 이분탐색을 활용하여 최대 혹은 최소를 구하는 방법이다.

예를 들어 1~10까지중 5를 확인해보고 최소를 구해야된다면 5부터 10까지 버린다.

그럼 1~4안에서 비교를 하며된다. 이러한 방식으로 절반값을 확인하며 최대 혹은 최소를 구하는 방법이다.

 

딱히 설명할게 없어서 바로 이론을 학습하고 바로 코딩에 들어갔다.

import sys
k,n = map(int, sys.stdin.readline().split())
small = 2**32-1
lan = []
for _ in range(k):
    t = int(sys.stdin.readline())
    lan.append(t)
    if t < small:
        small = t
l = 1
r = max(lan)
mid = small
while l != r:
    count = 0    # count
    for i in lan:
        count += i//mid
    if count >= n: # 성립하는 경우
        l = mid
    else: # 성립하지 않는경우
        r = mid-1
    mid = (l+r+1) // 2
print(mid)

나는 조금 의외였던게 r = max(lan)일때는 무리가 없이 통과를 했지만, r을 small로 두면 통과가 되지 않았다.

내가 생각할때 연산을 줄이기 위해서는 오른쪽 인덱스가 최소값이 들어와야한다고 생각했다. 그러나 안된다;; 왜그런지는 모르겠다.

'알고리즘' 카테고리의 다른 글

백준 2110 풀이 (공유기 설치, 이분 탐색)  (0) 2021.03.24
백준 2805 풀이 (나무 자르기, 이분 탐색)  (0) 2021.03.22
백준 10816 풀이 (숫자 카드 2, 이분 탐색, 해쉬 사용, Counter)  (0) 2021.03.18
백준 1920 풀이 (수 찾기, 이분 탐색)  (0) 2021.03.18
백준 11444 풀이 (피보나치 수 6, 분할 정복, 행렬 제곱)  (0) 2021.03.17
    '알고리즘' 카테고리의 다른 글
    • 백준 2110 풀이 (공유기 설치, 이분 탐색)
    • 백준 2805 풀이 (나무 자르기, 이분 탐색)
    • 백준 10816 풀이 (숫자 카드 2, 이분 탐색, 해쉬 사용, Counter)
    • 백준 1920 풀이 (수 찾기, 이분 탐색)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바