목록전체 글 (601)
sm 기술 블로그
※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 java.util.*; import java.io.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int K = sc.nextInt(); long N = sc.nextInt(); long[] lanLine = new long[K]; for (int i = 0; i = 0) { long mid = (end + start) / 2;..
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) 문제요약 주어진 랜선들로 원하는 개수만큼의 랜선을 최대한 크게 잘라보아라. 설명 문제를 처음보면 무슨소리인가 라는 생각이 들 것 이다. 문제를 풀어서 설명해보면..
import java.util.*; import java.io.*; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); String[] tmp = br.readLine().split(" "); int[] A = new int[N]; for (int i = 0; i < N; i++) { A[i] = Integer.parseInt(tmp[i]); } Arra..