목록문제/백준_파이썬 (155)
sm 기술 블로그
import sys input = sys.stdin.readline N = int(input()) K = int(input()) start = 1 end = K result = 0 while(end - start >= 0): mid = (start + end) // 2 cnt = 0 for i in range(1, N+1): cnt += min(mid // i, N) if(K
import sys input = sys.stdin.readline N, C = map(int, input().split()) home = sorted(list(int(input()) for _ in range(N))) start = 1 # 최소거리 end = home[-1] - home[0] # 최대거리 result = 0 while(end - start >= 0): mid = (start + end) // 2 currentHome = home[0] wifi = 1 for i in range(1, len(home)): if home[i] >= currentHome + mid: wifi += 1 currentHome = home[i] if wifi >= C: start = mid + 1 result = ..
※PyPy로 제출한 코드입니다. import sys input = sys.stdin.readline N, M = map(int, input().split()) tree = list(map(int, input().split())) start = 1 end = max(tree) while(end - start >= 0): mid = (start + end) // 2 cutTree = 0 for val in tree: tmp = val - mid if(tmp > 0): cutTree += tmp if(cutTree >= M): start = mid + 1 else: end = mid - 1 print(end) 문제요약 주어진 나무들을 잘라 원하는 크기로 만들고자 한다. 설명 전 문제의 랜선자르기와 굉장히 유사..
import sys input = sys.stdin.readline K, N = map(int, input().split()) lanLine = list(int(input()) for _ in range(K)) start = 1 end = max(lanLine) while(end - start >= 0): mid = (start + end) // 2 lines = 0 for val in lanLine: lines += val // mid if lines >= N: start = mid + 1 else: end = mid - 1 print(end) 문제요약 주어진 랜선들로 원하는 개수만큼의 랜선을 최대한 크게 잘라보아라. 설명 문제를 처음보면 무슨소리인가 라는 생각이 들 것 이다. 문제를 풀어서 설명해보면..