๐ ๋ฌธ์
https://www.acmicpc.net/problem/16564
๋ฌธ์
์ฑ๊ถ์ด๋ Heroes of the Storm ํ๋ก๊ฒ์ด๋จธ ์ง๋ง์์ด๋ค.
์ด ๊ฒ์์๋ ์ด N๊ฐ์ ์บ๋ฆญํฐ๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ ๊ฐ ์บ๋ฆญํฐ์ ๋ ๋ฒจ์ Xi์ด๋ค. ์ฑ๊ถ์ด๋ ์์ผ๋ก ๊ฒ์์ด ๋๋ ๋๊น์ง, ๋ ๋ฒจ์ ์ต๋ ์ดํฉ K๋งํผ ์ฌ๋ฆด ์ ์๋ค.
ํ ๋ชฉํ๋ ๋ฒจ T =min(Xi) (1 ≤ i ≤ N)๋ผ๊ณ ์ ์ํ๋ฉด, ๊ฒ์์ด ๋๋ ๋๊น์ง ์ฑ๊ถ์ด๊ฐ ๋ฌ์ฑํ ์ ์๋ ์ต๋ ํ ๋ชฉํ๋ ๋ฒจ T๋ ๋ฌด์์ธ๊ฐ?
์๋ฅผ ๋ค์ด, N = 3, X1= 10, X2= 20, X3= 15์ด๊ณ K = 10์ผ ๋, X1์ 7๋งํผ ์ฌ๋ฆฌ๊ณ X3์ 2๋งํผ ์ฌ๋ฆฌ๋ฉด ์ต์ ๋ ๋ฒจ Xi๋ 17์ด ๋๋ค. ๋ฐ๋ผ์ ํ ๋ชฉํ๋ ๋ฒจ T๋ 17์ด๋ค. ์ด ๊ฒฝ์ฐ์ฒ๋ผ ๋ ๋ฒจ์ ์ดํฉ K๋ณด๋ค ์ ๊ฒ ์ฌ๋ฆด ์๋ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์บ๋ฆญํฐ์ ๊ฐ์ N, ์ฌ๋ฆด ์ ์๋ ๋ ๋ฒจ ์ดํฉ K๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ N ≤1,000,000, 1 ≤ K ≤ 1,000,000,000)
๋ค์ N๊ฐ์ ์ค์๋ ํ์ฌ ๊ฐ ์บ๋ฆญํฐ์ ๋ ๋ฒจ์ด X1, X2, X3, ... , Xn ์ผ๋ก ์ฃผ์ด์ง๋ค. (1 ≤ Xi ≤ 1,000,000,000)
์ถ๋ ฅ
๊ฐ๋ฅํ ์ต๋ ํ ๋ชฉํ๋ ๋ฒจ T๋ฅผ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
์ ํ์ ์ธ ์ด๋ถํ์ ๋ฌธ์ ์ด๋ค.
๊ณต์ ๊ธฐ์ค์น(https://eijun.tistory.com/275)์ ๋๋ฌด์๋ฅด๊ธฐ(https://eijun.tistory.com/276) ๋ฌธ์ ๋ฅผ ํ์๋ค๋ฉด ์ฝ๊ฒ ํ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
์ค๋ช ์ ์๋ตํ๋ค.
๐โ๏ธ ์๊ฒฌ
์ด๋ฒ ์คํฐ๋์์ ์ด๋ถํ์ ๋ฌธ์ ๋ง์ ๊ณจ๋ผ ํ์๊ธฐ ๋๋ฌธ์ ์์ฐ์ค๋ ์ด๋ถํ์์ผ๋ก ํ์์ง๋ง, ๋ฌธ์ ์ ํ์ ํ์ ๋ชปํ๋ค๋ฉด ์ ๊ทผํ๋๋ฐ ๋ํญ์ ๊ฒช์์ ๊ฒ ๊ฐ๋ค.
์ด๋ถํ์ ๋ฌธ์ ๋ผ๋ ์์ ๋ฐ๋๋ก ์์ฃผ ๋ค์ฌ๋ค ๋ด์ผ๊ฒ ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main_๋ฐฑ์ค_16564_ํ์ค์คํ๋ก๊ฒ์ด๋จธ_์ค๋ฒ1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());//์บ๋ฆญํฐ๋ค ๊ฐ์
int K = Integer.parseInt(st.nextToken());//์ฌ๋ฆด ์ ์๋ ๋ ๋ฒจ ์ดํฉ
int[] levels = new int[N];//์บ๋ฆญํฐ๋ณ ๋ ๋ฒจ
for (int i = 0; i < N; i++) {
levels[i] = Integer.parseInt(br.readLine());
}//input
Arrays.sort(levels);
int result = 0;
int left = levels[0];
int right = levels[N-1];
while(left<=right) {
int mid = (left+right)/2;
long sum = 0;
for (int i = 0; i < N; i++) {
if(levels[i]<mid) sum += (mid-levels[i]);
}
if(sum<=K) {
result = mid;
left = mid+1;
}else {
right = mid-1;
}
}
System.out.println(result);
}//end of main
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ