public class CutTree {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] values = br.readLine().split(" ");
int N = Integer.parseInt(values[0]);
int M = Integer.parseInt(values[1]);
int[] trees = Arrays.stream(br.readLine().split(" ")).mapToInt(i -> Integer.parseInt(i)).toArray();
int start = 1;
int end = 0;
for(int tree : trees) {
if(end < tree) {
end = tree;
}
}
while(start <= end) {
long m_tree = 0;
int mid = (start + end) / 2;
for(int tree : trees) {
if(tree >= mid) {
m_tree += tree - mid;
}
}
if(m_tree >= M) {
start = mid + 1;
} else {
end = mid - 1;
}
}
System.out.println(end);
}
}
처음에 파이썬으로 풀 때와 같은 원리를 적용했는데 자꾸 실패하길래 뭐지뭐지 싶었다. m_tree 를 int로 잡아줘서 그랬던 것이였다. 나무가 많아지면 잘리고 남은 나무의 길이가 int형을 초과하기 때문이다. 때문에 long 으로 바꿔줘야 한다.