๋๋ฌด์๋ฅด๊ธฐ
์ฃผ์ = '๊ทธ๋ฆผ์ด ๋ฌด์ฑ์ํฉ๋๋ค'
๋ฌธ์ - 6์ค ์์ฝ
1. ๋ง์์ ๋๋ฌด ํ๋๊ณณ์ด ์์.
2. ๋๋ฌด M(๋ฏธํฐ) ํ์ํด์ ๋ฒ๋ชฉํ๊ธฐ๋กํจ.
3. ๋ชฉ์ฌ ์ ๋จ๊ธฐ ๊ตฌ์
. ๋์ด๊ฐ(H) ์
๋ ฅํ๋ฉด ๋
์์ H๋งํผ ์ฌ๋ผ๊ฐ์
ํ์ค์ ๋๋ํ ์๋ ๋๋ฌด ๋ค ! ์๋ฆ.
4. ํฌ๊ธฐ๊ฐ ๋์ด๊ฐ๋ณด๋ค Down์ธ ๋๋ฌด๋ ์์๋ฆผ. ๋์ด๊ฐ๋ณด๋ค Up ์ธ๋๋ฌด๋ ์๋ฆผ
(๋น์ฐํ์๋ฆฌ)
์ : (๋๋ฌด 4๊ฐ / 20m , 15m, 10m, 17m) ๋์ด๊ฐ: 15M
๋ต : 7M๋ง ์๋ ค์ ๋ค๊ณ ๊ฐ.
5. ๋ฌดํฑ๋๋ก ์๋ฅด๋ฉด ํ๊ฒฝ์ด ํ๊ดด๋๋ ๋๋ฌด ํ์ํ๋งํผ์ ๊ฐ๊น๊ฒ ์๋ฅด๊ณ ์ถ์.
6. M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๋ค๊ณ ๊ฐ๋ ค๋ฉด ์ ๋จ๊ธฐ์์ ์ค์ ํ ์์๋ ๋์ด ์ต๋๊ฐ
์
๋ ฅ ์ฒซ์งธ์ค 1. ๋๋ฌด์ ๊ฐฏ์(n) 2. ํ์ํ M
์
๋ ฅ ๋์งธ์ค 2. ๋๋ฌด์ ๋์ด (๊ฐฏ์(n)๋งํผ ์
๋ ฅ)
๋ฌธ์ ํ์ด ์๋ น
1. ์ด๋ถ ํ์ ์ ์กฐ ์์ ์ผ๋ก ์ํ ์ ํตํด ๋๋ฌด ๋ฐฐ์น
2. ์ ๋จ๊ธฐ์ ๋์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ผ์ง ๋๋ฌด๋ค์ ํฉ์ด
์ง์ ๊ฐ์ ธ๊ฐ ๋๋ฌด ๋์ด(M)๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ ๋จ๊ธฐ์ ๋์ด๋ฅผ ๋๋ ค ํ์.
๊ทธ๋ ์ง ์์ผ๋ฉด, ๋์ด๋ฅผ ์ค์ฌ ํ์ํ๋ค. (์ด๋ถํ์)
์์๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ ๋จ๊ธฐ์ ์ต๋๊ฐ์ ํ์.
์ฝ๋ ->
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] inputArray = br.readLine().split(" "); // ๋์ด ์ฐ๊ธฐ๋ก ๊ตฌ๋ถ(์ฌ๋ฌ๊ฐ์ง ์ซ์๋ฃ๊ธฐ์ํด) ๋ฐฐ์ด์ ๋ฃ๊ธฐ
int treeCount = Integer.parseInt(inputArray[0]); // ๋๋ฌด์ ์
int minLengthTree = Integer.parseInt(inputArray[1]); // ์ ์ด๋ ๊ฐ์ ธ๊ฐ์ผํ ๋๋ฌด์ ๊ธธ์ด
String[] preTreeArray = br.readLine().split(" "); // ์์ ๋์ผ
int[] treeArray = new int[treeCount]; // ๋๋ฌด ๋์ด๋ค์ ๋ฐฐ์ด
for(int i=0; i<preTreeArray.length; i++){
treeArray[i] = Integer.parseInt(preTreeArray[i]);
}
Arrays.sort(treeArray); // ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
int lastInt = treeArray[treeCount-1];
int maxHeight = lastInt; // ํฑ๋ ์ ์ต๋ ๋์ด
int minHeight = 0; // ํฑ๋ ์ ์ต์ ๋์ด
int middle = 0;
while(maxHeight >= minHeight){
middle = (minHeight+maxHeight)/2;
int cutTree = 0; // ํฑ๋ ๋ก ๋๋ฌด๋ฅผ ์๋์ ๋ ๋จ์ ๋๋ฌด ๊ธธ์ด ๋ณ์
long sumCutTree = 0; // ์๋ผ๋ธ ๋๋ฌด ๊ธธ์ด๋ค์ ํฉ, long์ ์ ์ธํ ์ด์ ๋ ํฉ์ด int ๋ฒ์๋ฅผ ๋์ด๊ฐ ์๋ ์๋ค.
for(int j=0; j<treeArray.length; j++){
cutTree = treeArray[j] - middle; // ์ด๋ถํ์์ผ๋ก ์ ์ ํ ํฑ๋ ์ ๋์ด๋ฅผ ์ฐพ์๊ฐ๋ค. ์ค๊ฐ ๊ฐ์ผ๋ก ๋๋ฌด๋ค์ ์๋ผ๋ณด๊ณ
// ๋ฒ์๋ฅผ ์ขํ๋๊ฐ๋ค.
if(cutTree <0){
cutTree = 0; // ์๋ฆฐ๊ฒ ์์ผ๋ฉด 0์ด๊ธฐ ๋๋ฌธ์ ๋ง์ด๋์ค ๊ฐ์ ์กด์ฌํ ์ ์๋ค.
}
sumCutTree += cutTree;
}
if(sumCutTree >= minLengthTree){ // ํฑ์ผ๋ก ์๋ผ๋ธ ๋๋ฌด ๊ธธ์ด๋ค์ ํฉ์ด ์ต์ํ์ผ๋ก ๊ฐ์ ธ๊ฐ์ผ๋๋ ๋๋ฌด ๊ธธ์ด๋ณด๋ค ํด ๋
minHeight = middle + 1; // ํ๊ฒฝ์ ์๊ฐํด์ ๋ฑ ๋ง์ถฐ ์๋ผ๊ฐ๋ ค๋ฉด ํฑ๋ ์ ๋์ด๋ฅผ ๋์ฌ์ ๋๋ฌด๋ฅผ ์กฐ๊ธ๋ง ์๋ผ๊ฐ์ผ ํ๋ค.
}else if(sumCutTree < minLengthTree){ // ํฑ์ผ๋ก ์๋ผ๋ธ ๋๋ฌด ๊ธธ์ด๋ค์ ํฉ์ด ์ต์ํ์ผ๋ก ๊ฐ์ ธ๊ฐ์ผ ๋๋ ๋๋ฌด ๊ธธ์ด๋ณด๋ค ์์ ๋
maxHeight = middle - 1; // ํ์ํ ๋๋ฌด๊ธธ์ด๋ณด๋ค ์๋ผ๋ธ ๋๋ฌด ๊ธธ์ด๋ค์ ํฉ์ด ์๊ธฐ ๋๋ฌธ์ ํฑ๋ ์ ๋์ด๋ฅผ ๋ฎ์ถฐ์ ๋ ๊ธธ๊ฒ ๋ฒ ์ด์ผ ํ๋ค.
}
}
System.out.println(maxHeight); // ํฑ๋ ์ ๋์ด๋ฅผ ์ค์ ํ ์ ์๋ ๋์ด์์ ์ต๋๊ฐ
}
}
'๐ฎ ์๊ณ ๋ฆฌ์ฆ Algorithm > โ ๏ธ ๋ฐฑ์ค โ ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ - [์คํ] ๊ท ํ์กํ ์ธ์ ๋ฌธ์ /ํ์ด (0) | 2021.03.14 |
---|
๋๊ธ