1. ๋ฌธ์ ์ค๋ช
์ฒ๋ฆฌํด์ผํ ์์
์ ์: n
์ฝ์ด์ ๊ฐ์์ ์ฝ์ด๋ง๋ค ์ผ์ ์ฒ๋ฆฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ : int [] cores
๋งจ ๋ง์ง๋ง์ ์ผ์ ๋๋ด๋ ์ฝ์ด์ ๋ฒํธ๋ฅผ ๊ตฌํ๋ผ. (๋ฒํธ๋ 1๋ถํฐ ์์ํ๋ค.)
2. ์ ๊ทผ ๋ฐฉ์
KEY WORD
: binary_search
- ์ด๋ถํ์์ผ๋ก n์ ์์
๋ ์ด์์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์๊ฐ๋ ์ค ๊ฐ์ฅ ์์ ์๊ฐ๋(k)๋ฅผ ๊ตฌํ๋ค.
(n = 15
๋ผ๊ณ ํ์. ์๊ฐ๋ณ๋ก ์งค๋์ ๋, 16์ด ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์ด๋ค.) - ์ฝ์ด์ ๋งจ ๋ง์ง๋ง ์๋ฆฌ๋ถํฐ k ์๊ฐ๋ ์ผ์ ํ๋ ๋
์์ ํ๋ํ๋ ์ ์ธ์์ผ๊ฐ๋ฉด์ ๋งจ ๋ง์ง๋ง์ผ๋ก n๋ฒ์งธ ์ผ์ ์ฒ๋ฆฌํ ์ฝ์ด๋ฅผ ๊ตฌํ๊ณ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
9์๊ฐ์งธ์์๋ 1๋ฒ ์ฝ์ด์ 2๋ฒ์ฝ์ด๋ง ์ผํ๋ฉฐ 16๋ฒ์งธ์ธ 2๋ฒ ์ฝ์ด๋ฅผ ์ ์ธํ๋ฉด 1๋ฒ์ฝ์ด๊ฐ target๊ฐ์ธ 15๋ฅผ ์ฒ๋ฆฌํ๋ ๋ง์ง๋ง ์ฝ์ด์ด๋ค. ๊ทธ๋์ ๋ต์ 1์ด๋ค.
(1) ์ฌ์ ์ง์
์ฒ๋ฆฌ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๋จ์๋ฅผ hour(์ดํ H)๋ผ๊ณ ๋์.0H
์ฆ ์์
์ ์์ํ๋ ์์ ์์๋ ๋ชจ๋ ์ฝ์ด๊ฐ ๋น์ด์์์ผ๋ก, ๋ชจ๋ ์ฝ์ด๊ฐ ์ผ์ ์์ํ๋ค.NH
์ผ ๋ ์ฒ๋ฆฌํ๋ ์์
์ ๊ฐ์๊ฐ ๋ช ๊ฐ์ธ์ง ์
์ ์๋๊ฐ? (์ฒ๋ฆฌํ๋ ์์
: ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ๊ฑฐ๋, ์ฒ๋ฆฌ ๋๋ ๊ฒ์ ํฉ์น ๊ฒ)
๋ง์ฝ cores = {1,3,5}
์ด๊ณ 10H์ผ ๋ ์ผ์ ๋ช ๊ฐ ๋๋๋์ง ํ์ธํด๋ณด์.
๋จผ์ 0H์ ๋ชจ๋ ์์
์ ์งํํ์์ผ๋ก, ๊ธฐ๋ณธ์ ์ผ๋ก 3๊ฐ์ ์ผ์ ์ฒ๋ฆฌํ๋ค.
์ดํ ๊ฐ ์ฝ์ด๋ ์์ ์ ์ผ ์ฒ๋ฆฌ ์๊ฐ์ ๋ฐฐ์
๋ง๋ค ์ผ์ ๋ ํ๋ค. ๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ์ฝ์ด๋ 10H์์ 10๊ฐ์ ์ผ์ ๋๋๊ณ , 3์ 3๊ฐ์ ์ผ์, 5๋ 2๊ฐ์ ์ผ์ ๋๋์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ 10H์ ์งํ๋ ์ผ์ 18
๊ฐ ์ด๋ค. ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช
ํ๊ฒ ๋ค.
๊ทธ๋ ๋ค ์ฐ๋ฆฌ๋ ์๊ฐ์ด ์ฃผ์ด์ง๋ฉด, ๊ทธ๋๊น์ง ์ฒ๋ฆฌํ ์ผ์ ๊ตฌํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํด ์ด๋ถํ์์ ํ๋ค.
๊ทธ๋ผ ์ด๋ถ ํ์์ ๋ฌด์์ ๊ธฐ์ค์ผ๋ก ํ๊ณ , target์ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ์์ง์ฌ์ผ ํ ๊น?
(2) ์ด๋ถ ํ์์ ์ฌ์ฉ
์ฐ๋ฆฌ๋ ๊ฒฝ๊ณผ๋ ์๊ฐ์ ํตํด ๋์ ๋ ์ฒ๋ฆฌ๋์ ๊ตฌํ ์ ์์์์ผ๋ก, ์๊ฐ
์ ๊ธฐ์ค์ผ๋ก ์ด๋ถํ์์ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ค.
- ์ด๋ถํ์์๋
์ฒ์ฅ(top)
๊ณผ๋ฐ๋ฐ๋ฅ(bottom)
์ด ์กด์ฌํ๋ค. ์ฌ๊ธฐ์ top์ ์ ์ผ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ฝ์ด๊ฐ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํ์ ๊ฒฝ์ฐ๋ก ๊ฐ์ ํ๋ค. bottom์ 1๋ก ๋๊ฒ ๋ค. - mid ๊ฐ์ ๋น์ฐํ๊ฒ๋ ์ด ๋์ ์ ๋ฐ์ด๋ค.
์ด๋ถํ์์ ๋ค์ ๋ฒ์ ๊ฒฐ์ ๊ธฐ์ค์? ๐ค
mid๊ฐ์ ๊ฒฝ๊ณผ๋ ์๊ฐ์ ๋ปํ๋ฏ๋ก, ํด๋น mid ์๊ฐ์ ๋์ ๋ ์ฒ๋ฆฌ๋(work)์ ๊ตฌํ๋ค.
๊ตฌํ๋ ๋ฒ์ (mid/cores์ ๊ฐ ์์)
๋ค์ ํฉ + ์ด๊ธฐ ์ฒ๋ฆฌ๋(cores.length)
์ด๋ค.
์ด๋ ๊ฒ ๋์จ ๋์ ๋ ์ฒ๋ฆฌ๋๊ณผ ์ฐ๋ฆฌ๊ฐ ๋ชฉํ๋ก ํ๋ ์ฒ๋ฆฌ๋(n)์ ๋น๊ตํ๋ค.
n > work
์ด๋ฉด, bottom = mid+1 ํ์ฌ ์ํฅํ๋ค.n < work
์ด๋ฉด, top = mid-1 ํ์ฌ ํํฅํ๋ค.n == work
์ด๋ฉด top = mid-1 ํ์ฌ ํํฅํ๋ค.
3๋ฒ ๊ฒฝ์ฐ๋ ์ ๊ทธ๋ฐ์ง ํ๊ณ ๋ค๊ธฐ ๐
์ n == work๋ก ๋ฑ ๋ง์๋๋ฐ, top = mid-1๋ก ํํฅํ ๊น? ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐ๋ฆฌ๋ LowerBound
๋ฅผ ํ์ฉ ํด์ผํ๋ค. (ํด๋น ๊ฐ๋
์ ๋ชจ๋ฅด๋ ๋ถ๋ค์ ์ด๋ถ ํ์ & Upper Bound, Lower Bound ๊ฐ๋
์ ๋ฆฌ๋ณด๊ณ ์ค๊ธฐ)UpperBound
๋ฅผ ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค. n๊ณผ ๊ฒฝ๊ณผ์๊ฐ๋ณ ์ฒ๋ฆฌ๋์ด ๊ฐ์ ๊ฒฝ์ฐ, ์ฆ ์์์์ 2H์์ ์ฒ๋ฆฌ๋์ n๊ณผ ๊ฐ์ 6์ธ๋ฐ, upperBound๋ก ํ๋ฉด, mid == 2 ์ผ ๋์ ์ฒ๋ฆฌ๋๊ณผ n์ด ๊ฐ์ผ๋ฉด ์ํฅํ๋ฏ๋ก, 8์ returnํ๋ค.
๋น์ด ์ฐ๋ฆฌ ๊ณํ์ ๋ชฉํ๊ฐ์ด ๋ค์ด์๋ ๊ฒฝ๊ณผ ์๊ฐ์ ๊ตฌํด์, ๋งจ ์ค๋ฅธ์ชฝ์ ์ฝ์ด๋ถํฐ ํ์ธ ํ ์ ์ธํด๊ฐ๋ฉฐ, ๋งจ ๋ง์ง๋ง์ผ๋ก ๊ณ์ฐ๋ ์ฝ์ด๋ฅผ ๊ตฌํ๋ค ์๋ค. ํ์ง๋ง UpperBound
๋ก ๊ฐ์ ๊ตฌํ๋ฉด ์ ์ด์ ๋ชฉํ๋ก ํ๋ ์ฒ๋ฆฌ ๊ฐ์๊ฐ ๋ค์ด์๋ ๊ฒฝ๊ณผ์๊ฐ์ ์ ํํ์ง ๋ชปํด์ ๋ต์ ๊ตฌํ์ง ๋ชปํ๋ค.
๋ค์์ ๋ด ์ค๋ช
์ ๊ทธ๋ฆผ์ผ๋ก ํํํ ๊ฒ์ด๋ค.
uppperBound์ ๋์ ์ฒ๋ฆฌ๋ 8์ธ 3์๊ฐ์งธ๋ฅผ ๊ตฌํด๋ฒ๋ฆฌ๋ฉด, ๊ทธ ์์์ ์๋ฌด๋ฆฌ loop๋ฅผ ๋์๋ 6๋ฒ์งธ ์ฒ๋ฆฌ Core๋ฅผ ์ฐพ์ง ๋ชปํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.*;
// 0. core๋ณ๋ก ์์
์ฒ๋ฆฌ ์๊ฐ์ด ์ ํ ์์ด์, N์ด์ ์ผ๋ง๋ ์ผ์ ๋๋๋์ง ํ์ธ ๊ฐ๋ฅ
// 1. ์ผ์ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ถ ํ์ + upper bound๋ก ์ด๊ณผํด์ ์ผ์ ํ ๊ฒ ์ค target์ ๊ฐ๊น์ด ์ต์๊ฐ ์ฐพ๊ธฐ
// 2. ์ต์๊ฐ์์ ์ฝ์ด ํ๋์ฉ ์ง์๊ฐ๋ฉฐ, ๋ง์ง๋ง์ผ๋ก ์ผํ ์ฝ์ด ์ฐพ๊ธฐ
class Solution {
public int solution(int n, int[] cores) {
int ceilingTime = bs_time(n, cores);
int work = cores.length;
for(int i = 0; i < cores.length; i++){
work += ceilingTime/cores[i];
}
int t = cores.length-1;
while (work >= n){
if(ceilingTime%cores[t] == 0) {
t--; work--;
}else{
t--;
}
}
return t+1+1;
}
// tgt์ ์ ์ผ ๊ฐ๊น์ฐ๋ฉด์๋ ๊ทธ๊ฒ์ ์ด๊ณผํ๋ ์ผ์ ๊ฐ์๋ฅผ ์ฒ๋ฆฌํ๋ `์๊ฐ`์ ๊ตฌํ๋ค.
public int bs_time(int tgt, int [] cores){
int top = 10000 * tgt; // ์ฒ์ฅ: ์ ์ผ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ฝ์ด๋ก๋ง ์ผ์ฒ๋ฆฌ ํ์ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ
int btm = 1;
while(btm <= top) {
int mid = (top + btm)/2;
int amt = cores.length; // mid ์๊ฐ์ ์ฒ๋ฆฌํ ์ ์๋ ์ผ์ ๋
for(int i = 0; i < cores.length; i++){
amt += mid/cores[i];
}
if(amt < tgt) btm = mid+1;
else if(amt >= tgt) top = mid-1;
}
return btm;
}
}
4. ์ ๊ทผ ๋ฐฉ์์ ๋ ์ฌ๋ฆฌ์ง ๋ชป ํ๋ ์ด์ ๊ฐ ๋ญ๊น?
- ๋ฌธ์ ๋ฅผ ๋๋ฌด ํ์ง ์์์ ๊ฐ์ด ๋จ์ด์ก๋ค.
- ์ด๋ถํ์์ ๊ธฐ์ค์ ์ค์ ํ์ง ๋ชปํ๋ค. (๋ฌด์์ ๊ธฐ์ค์ผ๋ก bottom, top, mid๋ฅผ ๊ตฌํ ์ง, ๋ฌด์์ผ๋ก mid์ target์ ๋น๊ตํ ์ง)
๋ํ ํด๋น๋ฌธ์ ๋ ์ฒ๋ฆฌ์๊ฐ์ ๊ตฌํด์ ๊ทธ ์ฒ๋ฆฌ์๊ฐ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋์ ๋น๊ตํด์ผ ํด์ ๋ ์ง๊ด์ ์ด์๋ค. ์ด ๋ํ ํ ๋ชซํ ๋ฏ.