๐ค 1. ๋ฌธ์ ์ค๋ช
๋ฌธ์ ์ค๋ช
n๋ช ์ด ์ ๊ตญ์ฌ์ฌ๋ฅผ ์ํด ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ๊ฐ ์ ๊ตญ์ฌ์ฌ๋์ ์๋ ์ฌ์ฌ๊ด๋ง๋ค ์ฌ์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ค๋ฆ ๋๋ค.
์ฒ์์ ๋ชจ๋ ์ฌ์ฌ๋๋ ๋น์ด์์ต๋๋ค. ํ ์ฌ์ฌ๋์์๋ ๋์์ ํ ๋ช ๋ง ์ฌ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์์ ์ ์๋ ์ฌ๋์ ๋น์ด ์๋ ์ฌ์ฌ๋๋ก ๊ฐ์ ์ฌ์ฌ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ ๋นจ๋ฆฌ ๋๋๋ ์ฌ์ฌ๋๊ฐ ์์ผ๋ฉด ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ทธ๊ณณ์ผ๋ก ๊ฐ์ ์ฌ์ฌ๋ฅผ ๋ฐ์ ์๋ ์์ต๋๋ค.
๋ชจ๋ ์ฌ๋์ด ์ฌ์ฌ๋ฅผ ๋ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์๋ก ํ๊ณ ์ถ์ต๋๋ค.
์ ๊ตญ์ฌ์ฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋ ์ n, ๊ฐ ์ฌ์ฌ๊ด์ด ํ ๋ช ์ ์ฌ์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋ด๊ธด ๋ฐฐ์ด times๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ฌ๋์ด ์ฌ์ฌ๋ฅผ ๋ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ์ ๊ตญ์ฌ์ฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋์ 1๋ช ์ด์ 1,000,000,000๋ช ์ดํ์ ๋๋ค.
- ๊ฐ ์ฌ์ฌ๊ด์ด ํ ๋ช ์ ์ฌ์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ 1๋ถ ์ด์ 1,000,000,000๋ถ ์ดํ์ ๋๋ค.
- ์ฌ์ฌ๊ด์ 1๋ช ์ด์ 100,000๋ช ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
n | times | return |
6 | [7, 10] | 28 |
์ ์ถ๋ ฅ ์ ์ค๋ช
๊ฐ์ฅ ์ฒซ ๋ ์ฌ๋์ ๋ฐ๋ก ์ฌ์ฌ๋ฅผ ๋ฐ์ผ๋ฌ ๊ฐ๋๋ค.
7๋ถ์ด ๋์์ ๋, ์ฒซ ๋ฒ์งธ ์ฌ์ฌ๋๊ฐ ๋น๊ณ 3๋ฒ์งธ ์ฌ๋์ด ์ฌ์ฌ๋ฅผ ๋ฐ์ต๋๋ค.
10๋ถ์ด ๋์์ ๋, ๋ ๋ฒ์งธ ์ฌ์ฌ๋๊ฐ ๋น๊ณ 4๋ฒ์งธ ์ฌ๋์ด ์ฌ์ฌ๋ฅผ ๋ฐ์ต๋๋ค.
14๋ถ์ด ๋์์ ๋, ์ฒซ ๋ฒ์งธ ์ฌ์ฌ๋๊ฐ ๋น๊ณ 5๋ฒ์งธ ์ฌ๋์ด ์ฌ์ฌ๋ฅผ ๋ฐ์ต๋๋ค.
20๋ถ์ด ๋์์ ๋, ๋ ๋ฒ์งธ ์ฌ์ฌ๋๊ฐ ๋น์ง๋ง 6๋ฒ์งธ ์ฌ๋์ด ๊ทธ๊ณณ์์ ์ฌ์ฌ๋ฅผ ๋ฐ์ง ์๊ณ 1๋ถ์ ๋ ๊ธฐ๋ค๋ฆฐ ํ์ ์ฒซ ๋ฒ์งธ ์ฌ์ฌ๋์์ ์ฌ์ฌ๋ฅผ ๋ฐ์ผ๋ฉด 28๋ถ์ ๋ชจ๋ ์ฌ๋์ ์ฌ์ฌ๊ฐ ๋๋ฉ๋๋ค.
๐ก 2. ์ ๊ทผ๋ฐฉ์
์ด๋ถํ์(Binary Search)
์ฃผ์ด์ง ๋ฐฐ์ด์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋น ๋ฅธ ์์๋๋ก ์ ๋ ฌ์ ํด ์ค๋ค. (์ค๋ฆ์ฐจ์)
times[0]์ ์ ๊ตญ์ฌ์ฌ์ ์์๋๋ ๊ฐ์ฅ ์งง์ ์๊ฐ์ด๊ณ times[times.length-1] ์ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋ ์๋ฅผ ๊ณฑํ ๊ฐ์ด ์ต๋๋ก ์์๋ ์ ์๋ ์๊ฐ์ด๋ค. ์ฌ๊ธฐ์๋ ์ ์ผ ์ค๋๊ฑธ๋ฆฌ๋ ์ฌ์ฌ์๊ฐ์ด 10๋ถ์ด๊ณ ์ฌ๋์ 6๋ช ์ด๋๊น 10*6 = 60์ด ์ต๋ ์๊ฐ์ด๋ค.
์ด๋ถํ์์ผ๋ก 1~60 ์ฌ์ด๋ฅผ ํ์ํด๋ ๋์ง๋ง, ๋ฐฐ์ด์์ ๊ฐ์ฅ ์งง์ ์๊ฐ์ 7์ด๋๊น 7~60 ์ฌ์ด๋ฅผ ํ์ํ๋ ์ฝ๋๋ฅผ ์ง๋ฉด ๋๋ค.
์ด๋ถ ํ์์์ ์ค์ํ ๊ฒ์ start, mid, end ๊ฐ์ด๋ค.
์ด ๋ฌธ์ ์์๋ ์ ๊ตญ์ฌ์ฌ์ ๊ฑธ๋ฆฌ๋ ์ต์์ ์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ๋ค์ด ์๊ฐ(๋ถ)์ด๋ค.
์ฌ๊ธฐ์ ์ฒซ ์์์ start = times[0] ์ด๊ณ , end = times[tiems.length-1] ๋ก ์์ํ๋ค.
(start+end) / 2 ๋ฅผ ํด๊ฐ๋ฉด์ mid๋ฅผ ๊ตฌํ๊ณ , mid๋ฅผ times[0], times[1]... ์ผ๋ก ์์๋๋ก ๋๋ ๊ฐ์
people ๋ณ์์ ๋์ ์์ผ ์ค๋ค. people์ ๊ฐ ์ฌ์ฌ๊ด์ด ์ฒ๋ฆฌํ ์ฌ๋ ์๋ฅผ ๋ํ ๊ฐ์ด๋ค.
๋ง์ฝ์ people์ด ๋ฌธ์ ์์ ์ฃผ์ด์ง n ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด (people>= n)
์ฌ์ฌํด์ผ ํ ์ธ์๋ณด๋ค ๋ ๋ง์ ์ฌ๋์ ์ฌ์ฌํ ๊ฒ ๋๋ค.
๊ทธ๋ผ minTime ๊ฐ์ ํ์ฌ mid๊ฐ์ ๋ด์ ์ฃผ๊ณ
์ต์ ์๊ฐ์ ์ฐพ๊ธฐ ์ํด์ ์ผ์ชฝ ๋ถ๋ถ์ผ๋ก ๋ฒ์๋ฅผ ์ขํ ์ค๋ค.
(์ฐพ๋ ๋ฒ์๋ฅผ start ๋ถํฐ mid-1๋ก ์ค์ฌ ์ค๋ค. )
๋ง์ฝ์ people์ด n๊ฐ๋ณด๋ค ์์ผ๋ฉด
์ฃผ์ด์ง ์ธ์์๋งํผ ์ฌ์ฌ๋ฅผ ๋ค ๋ชป๋๋์ผ๋๊น ์๊ฐ์ด ๋ ํ์ํ๋ค.
๊ทธ๋์ start๋ฅผ mid+1 ํด์ค๋ค...
while ๋ฌธ์ ์ข ๋ฃ ๋ฒ์๋ start > end ์ผ ๋์ด๋ค.
start ๊ฐ์ด end ๋ณด๋ค ๋ ์ปค์ ธ์ ๋ฒ์๊ฐ ๋ ์ด์ ์ขํ์ง์ง ์๊ณ ์ค๊ฐ ๊ฐ์ ์ฐพ์ ์ ์์ ๋ ์ข ๋ฃ๊ฐ ๋๋ค.
์ฆ, while๋ฌธ์ (start<=end)์ผ ๋๋ง ๋์๊ฐ๋ค.
โญ 3. ์ฝ๋
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
long minTime = Long.MAX_VALUE; // ์ต์ ์๊ฐ ๊ตฌํ ๋ณ์
Arrays.sort(times); // times ๋ฐฐ์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
long start = times[0];
long mid = 0;
long end = (long)times[times.length-1] * (long)n;
long people = 0;
while(start <= end) {
mid = (start + end)/2; // ์ค๊ฐ ์๊ฐ ๊ณ์ฐ
people = 0;
// ๊ฐ ์ฌ์ฌ๋๊ฐ mid ์๊ฐ๋์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋์ ์
for(int time : times) {
people += mid / time;
}
// ์ฒ๋ฆฌ ํ ์ ์๋ ์ฌ๋์ด n๋ช
์ด์์ด๋ฉด
// ์ต์ ์๊ฐ ๊ฐฑ์
if (people >= n) {
minTime = mid;
end = mid - 1;// ์ต์ ์๊ฐ์ ์ฐพ๊ธฐ ์ํด ์ผ์ชฝ ๋ถ๋ถ์ผ๋ก ๋ฒ์๋ฅผ ์ขํ
} else { // ๋ ๋ง์ ์๊ฐ์ด ํ์ํด
start = mid + 1; // ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ผ๋ก ๋ฒ์๋ฅผ ๋๋ฆผ
}
}
return minTime;
}
}
people๊ณผ n์ ์ฌ๋ ์๋ผ์ ๊ทธ๋ฅ intํ์ ์ผ๋ก ์ ์ธ์ ํ๋ ค๊ณ ํ๋๋ฐ ๊ตณ์ด long ํ์ ์ผ๋ก ์ ์ธํ๋ ์ด์ ๋ ๊ฐ์ด ๋งค์ฐ ์ปค์ง ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌธ์ ์์ ์ธ์์ n์ ๋ฒ์๊ฐ 10์ต๊น์ง์ด๋ค. ๋ง์ฝ ์ธ์ ์ n์ด ์๋ฐฑ๋ง ์ด์์ด๊ณ , ๊ฐ ์ฌ์ฌ๋์์ ๊ฑธ๋ฆฌ๋ ์๊ฐ(times ๋ฐฐ์ด์ ๊ฐ)์ด ํฌ๋ค๋ฉด, mid / time์ ๊ฐ๋ค์ ํฉ์ฐํ people์ด int์ ์ต๋๊ฐ์ธ ์ฝ 21์ต์ ์ฝ๊ฒ ์ด๊ณผํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, int๋ก ์ ์ธํ๋ฉด ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํด์ ์๋ชป๋ ๊ฐ์ด ๋ค์ด ์จ๋ค.
๐๐ป 4. ๊ฐ์ ์ ํ ๋ฌธ์ (์ด๋ถํ์)