๐ 12 - ๋ง๊ตฌ๊ฐ ์ ํ๊ธฐ(๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ)
N๊ฐ์ ๋ง๊ตฌ๊ฐ์ด ์์ง์ ์์ ์์ต๋๋ค. ๊ฐ ๋ง๊ตฌ๊ฐ์ x1, x2, ..., xN์ ์ขํ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ง๊ตฌ๊ฐ๊ฐ์ ์ขํ๊ณผ ์ค๋ณต๋๋ ์ผ์ ์์ต๋๋ค. ๊ฐ ๋ง๊ตฌ๊ฐ์๋ ํ ๋ง๋ฆฌ์ ๋ง๋ง ๋ฃ์ ์ ์๊ณ , ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๊ฒ ๋ง์ ๋ง๊ตฌ๊ฐ์ ๋ฐฐ์นํ๊ณ ์ถ์ต๋๋ค. C๋ง๋ฆฌ์ ๋ง์ N๊ฐ์ ๋ง๊ตฌ๊ฐ์ ๋ฐฐ์นํ์ ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๋ ๊ทธ ์ต๋๊ฐ์ ์ถ๋ ฅํด๋ณด์!
์ ๋ ฅ์ค๋ช
์ฒซ ์ค์ ์์ฐ์ N๊ณผ C๊ฐ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์ ๋ง๊ตฌ๊ฐ์ ์ขํ๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ์ค๋ช
์ฒซ ์ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ์ต๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค.
์
๋ ฅ์์
5 3
1 2 8 4 9
์ถ๋ ฅ์์
3
๐ ํ์ด ๋ฐฉ๋ฒ
๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๋ ๊ทธ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋ง๊ตฌ๊ฐ์ ๋ง 3๋ง๋ฆฌ๋ฅผ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ๋ ํ๊ฐ์ง ์ด์์ด์ง๋ง ๊ทธ ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๋ ์ต์ ์ ๊ฐ์ ๊ตฌํด์ผํ๋ค๋ ๊ฒ์ด๋ค. ํน์ ํ ์ํฉ์์ ์ต์ ์ ๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก ์ด๋ถ ํ์์ ์ด์ฉํ ํ๋ผ๋ฉํธ๋ฆญ ์์น ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๋๋ ์ ์ ํ๋ผ๋ฉํธ๋ฆญ ์์น ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๋๋ ์ฃผ์ด์ง ์ผ๋ จ์ ๊ฐ๋ค์ด ์๋๋ผ ์ฃผ์ด์ง ๋ฒ์์ ํฌ์ปค์ค๋ฅผ ๋ง์ถฐ์ ํ์ด์ผ ๋๋ค๋ ๊ฒ์ด๋ค.
- ๋ง๊ตฌ๊ฐ์ ์ขํ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
- lt(๋ง ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ)๋ฅผ 1๋ก ์ด๊ธฐํํ๋ค. stable[0] ๊ฐ์ด 1์ด ์๋ ๊ฒฝ์ฐ์ ์ํ๋ ๋ต์ ์ป์ง ๋ชปํ๊ฒ ๋๋ฏ๋ก stable[0]์ผ๋ก ์ด๊ธฐํํด์๋ ์๋๋ค.
- rt(๋ง ์ฌ์ด์ ์ต๋ ๊ฑฐ๋ฆฌ)๋ฅผ ๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
- mid(๊ฐ์ฅ ๊ฐ๊น์ด ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ)๋ฅผ Math.floor((lt + rt) / 2)๋ก ์ด๊ธฐํํ๋ค. (์ด๋ถ ํ์)
- count() ํจ์๋ mid(๊ฐ์ฅ ๊ฐ๊น์ด ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ)๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ๋ง๊ตฌ๊ฐ์ ๋ช๋ง๋ฆฌ์ ๋ง์ด ๋ฐฐ์น๋ ์ ์๋์ง๋ฅผ ๋ฆฌํดํด์ค๋ค. mid๊ฐ ์์ ์๋ก ๋ ๋ง์ ๋ง์ด ๋ฐฐ์น๋ ์ ์๋ค.
- count() ํจ์์์ ๋ฆฌํด๋๋ ๊ฐ์ด 3๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ฏ๋ก answer์ mid๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ต๋๊ฐ์ ๊ตฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ mid ์ดํ์ ๊ฐ๋ค์ ํ์์์ ์ ์ธ๋๋ค. lt = mid + 1
- ๋ฆฌํด๋๋ ๊ฐ์ด 3๋ณด๋ค ์๋ค๋ฉด mid ์ด์์ ๊ฑฐ๋ฆฌ๋ค ๋ํ 3๋ง๋ฆฌ ์ด์์ ๋ง๋ค์ด ๋ฐฐ์น๋ ์ ์์ผ๋ฏ๋ก ํ์์์ ์ ์ธ๋๋ค. rt = mid - 1
๐ ์์ค์ฝ๋
function count(stable, dist) {
let cnt = 1;
//์ฒซ ๋ฒ์งธ ์ขํ์ ๋ง ๋ฐฐ์น
horse = stable[0];
for (let i = 1; i < stable.length; i++) {
// ํด๋น ์์น์์ ๋ง์ ์ฒ์ ์์น๋ฅผ ๋บ๋๋ฐ ํ์ฌ ์ ํด์ง ๊ฐ์ฅ ๊ฐ๊น์ด ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ(dist)๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด cnt++
// ๋ง์ ์์น๋ฅผ ํด๋น ์์น๋ก ๋ณ๊ฒฝํ์ฌ ๋ง์ ๋ ๋ฐฐ์นํ ์ ์๋์ง ๊ณ์ํด์ ๋น๊ต
if (stable[i] - horse >= dist) {
cnt++;
// ๋ง ์ฌ๋ฐฐ์น
horse = stable[i];
}
}
return cnt;
}
function solution(c, stable) {
let answer;
stable.sort((a, b) => a - b);
// lt - ๋ง ์ฌ์ด์ ์ต์ ๊ฑฐ๋ฆฌ, rt - ๋ง ์ฌ์ด์ ์ต๋ ๊ฑฐ๋ฆฌ
let lt = 1,
rt = stable[stable.length - 1];
while (lt <= rt) {
// mid - ๊ฐ์ฅ ๊ฐ๊น์ด ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ
let mid = Math.floor((lt + rt) / 2);
// ๋ฐฐ์นํ ์ ์๋ ๋ง์ ๊ฐ์๊ฐ c๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด lt์ ํฌ๊ธฐ๋ฅผ ๋๋ ค์ ํ์
// c๋ณด๋ค ์๋ค๋ฉด rt์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ ํ์
if (count(stable, mid) >= c) {
answer = mid;
// ๋ ์ข์ ๋ต์ ์ฐพ๊ธฐ ์ํด์
lt = mid + 1;
} else rt = mid - 1;
}
return answer;
}
let arr = [1, 2, 8, 4, 9];
console.log(solution(3, arr));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 8] 02 - ์ด์ง์ ์ถ๋ ฅ(์ฌ๊ท) (0) | 2022.10.14 |
---|---|
[JavaScript/section 8] 01 - ์ฌ๊ทํจ์ (0) | 2022.10.14 |
[JavaScript/section 7] 11 - ๋ฎค์ง ๋น๋์ค (0) | 2022.10.10 |
[JavaScript/section 7] 10 - ์ด๋ถ ๊ฒ์ (2) | 2022.10.09 |
[JavaScript/section 7] 09 - ๊ฒฐํผ์ (2) | 2022.10.08 |