๐ ๋ฌธ์
๋ฌธ์
์๊ทผ์ด๋ ๋๋ฌด M๋ฏธํฐ๊ฐ ํ์ํ๋ค. ๊ทผ์ฒ์ ๋๋ฌด๋ฅผ ๊ตฌ์ ํ ๊ณณ์ด ๋ชจ๋ ๋งํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ ๋ถ์ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์ ๋ถ๋ ์๊ทผ์ด๋ค ์ง ๊ทผ์ฒ์ ๋๋ฌด ํ ์ค์ ๋ํ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ๋ด์ฃผ์๊ณ , ์๊ทผ์ด๋ ์๋ก ๊ตฌ์ ํ ๋ชฉ์ฌ์ ๋จ๊ธฐ๋ฅผ ์ด์ฉํด์ ๋๋ฌด๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค.
๋ชฉ์ฌ์ ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋จผ์ , ์๊ทผ์ด๋ ์ ๋จ๊ธฐ์ ๋์ด H๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋์ด๋ฅผ ์ง์ ํ๋ฉด ํฑ๋ ์ด ๋ ์ผ๋ก๋ถํฐ H๋ฏธํฐ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ ๋ค์, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด๋ฅผ ๋ชจ๋ ์ ๋จํด๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์, ๋์ด๊ฐ H๋ณด๋ค ํฐ ๋๋ฌด๋ H ์์ ๋ถ๋ถ์ด ์๋ฆด ๊ฒ์ด๊ณ , ๋ฎ์ ๋๋ฌด๋ ์๋ฆฌ์ง ์์ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด์ ๋์ด๊ฐ 20, 15, 10, 17์ด๋ผ๊ณ ํ์. ์๊ทผ์ด๊ฐ ๋์ด๋ฅผ 15๋ก ์ง์ ํ๋ค๋ฉด, ๋๋ฌด๋ฅผ ์๋ฅธ ๋ค์ ๋์ด๋ 15, 15, 10, 15๊ฐ ๋ ๊ฒ์ด๊ณ , ์๊ทผ์ด๋ ๊ธธ์ด๊ฐ 5์ธ ๋๋ฌด์ 2์ธ ๋๋ฌด๋ฅผ ๋ค๊ณ ์ง์ ๊ฐ ๊ฒ์ด๋ค. (์ด 7๋ฏธํฐ๋ฅผ ์ง์ ๋ค๊ณ ๊ฐ๋ค) ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด๋ ์์ ์ ์ ๋๋ 0์ด๋ค.
์๊ทผ์ด๋ ํ๊ฒฝ์ ๋งค์ฐ ๊ด์ฌ์ด ๋ง๊ธฐ ๋๋ฌธ์, ๋๋ฌด๋ฅผ ํ์ํ ๋งํผ๋ง ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋, ์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋๋ฌด์ ์ N๊ณผ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ ๋๋ฌด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)
๋์งธ ์ค์๋ ๋๋ฌด์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋๋ฌด์ ๋์ด์ ํฉ์ ํญ์ M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ธฐ ๋๋ฌธ์, ์๊ทผ์ด๋ ์ง์ ํ์ํ ๋๋ฌด๋ฅผ ํญ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ๋์ด๋ 1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๋ค.
์ถ๋ ฅ
์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
๐ก ์๋ฃํ์ ๋ฒ์๋ฅผ ์ ์๊ฐํด์ผํ๋ ๋ฌธ์ ์ด๋ค.
๊ฐ์ ธ๊ฐ๋ ค๋ ์ด ๋๋ฌด ๊ธธ์ด์ ์ต์๊ฐ M๋ฏธํฐ์ธ๋ฐ, M์ ์ต๋์น๊ฐ 20์ต ์ ๋์ด๋ฏ๋ก ์กฐ๊ธ ๋ง์ด ์๋ฅผ ๊ฒฝ์ฐ INTํ ๋ณ์์ ๋ฒ์์ธ ์ฝ 21์ต์ ๋์ด๊ฐ ์๊ฐ ์๋ค.
๋ฐ๋ผ์ ์๋ฅธ ๊ธธ์ด๋ฅผ ํฉํ๋ ๋ณ์ํ์ ์ long์ผ๋ก ์ ์ธํด์ค์ผ ๋ฌธ์ ๊ฐ ์๋๋ค.
๊ณต์ ๊ธฐ ์ค์น ๋ฌธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ถํ์์ผ๋ก ์ ์ ๋์ด๋ฅผ ์ฐพ์๊ฐ๋ ๋ฌธ์ ์ด๋ค.
โป๏ธ ์ ๋ ฅ๋ ๋๋ฌด๋ค์ ๊ธธ์ด๋ฅผ ์ ๋ ฌํ๋ค.
โป๏ธ ์์์ ์ ์ผ ์งง์ ๋๋ฌด์ ์ ์ผ ๊ธด ๋๋ฌด์ ์ค๊ฐ๊ฐ์ผ๋ก ์ ๋จ ๋์ด๋ฅผ ์ ํ๋ค.
โป๏ธ ๋ชจ๋ ๋๋ฌด๋ฅผ ํ์ํ๋ฉฐ ์ ๋จ ๋์ด์์ ์๋ฆฌ๋ ๋๋ฌด ๊ธธ์ด๋ฅผ ๊ณ์ฐํ๊ณ ํฉํ๋ค.
โป๏ธ ์ดํฉ์ด ๋ชฉํ์น๋ณด๋ค ํฌ๋ฉด ๋๋ฌด ๋ง์ด ์๋๋ค๋ ๋ป์ด๋ฏ๋ก ์ ๋จ ๋์ด๋ฅผ ๋์ด๊ณ , ๋ชฉํ์น๋ณด๋ค ๋ฎ์ผ๋ฉด ๋ ์๋๋ค๋ ๋ป์ด๋ฏ๋ก ์ ๋จ ๋์ด๋ฅผ ๋ฎ์ถ๋ค.
โป๏ธ ํ์์ ๋ฐ๋ณตํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main_๋ฐฑ์ค_2805_๋๋ฌด์๋ฅด๊ธฐ_์ค๋ฒ3 {
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()); //๋๋ฌด์ ์(1~1,000,000)
int M = Integer.parseInt(st.nextToken()); //๊ฐ์ ธ๊ฐ ๋๋ฌด์ ๊ธธ์ด(1~20์ต)
int[] trees = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
trees[i] = Integer.parseInt(st.nextToken());
}//input
Arrays.sort(trees);
int left = 1;
int right = trees[N-1];
int result = 0;
while(left<=right) {
int mid = (left+right)/2;
// M์ด 20์ต์ด๊ธฐ ๋๋ฌธ์ ์๋ฅธ ํฉ์ด INT๋ฒ์(21์ต)์ ๋์ด๊ฐ ์ ์๋ค
long sum = 0;
for (int i = 0; i < N; i++) {
if(trees[i]>=mid) {
sum += (trees[i]-mid);
}
}
if(sum>=M) {
result = mid;
// ๋๋ฌด ๋ง์ด ์๋ฅธ ๊ฒ์ผ ์ ์์ผ๋, ์ ๋จ๊ธฐ ๋์ด๋ฅผ ๋์ฌ๋ณธ๋ค.
left = mid+1;
}else {
right = mid-1;
}
}
System.out.println(result);
}//end of main
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ