Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section07 - 12 - ๋งˆ๊ตฟ๊ฐ„ ์ •ํ•˜๊ธฐ(๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)

YWTechIT 2021. 9. 15. 10:40
728x90

๐Ÿ“ section07 - 12 - ๋งˆ๊ตฌ๊ฐ„ ์ •ํ•˜๊ธฐ(๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๋ฌธ์ œ: N๊ฐœ์˜ ๋งˆ๊ตฌ๊ฐ„์ด ์ˆ˜์ง์„ ์ƒ์— ์žˆ๋‹ค. ๊ฐ ๋งˆ๊ตฌ๊ฐ„์€ x1, x2, x3, ..., xN ์˜ ์ขŒํ‘œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋งˆ๊ตฌ๊ฐ„ ๊ฐ„์— ์ขŒํ‘œ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ์ผ์€ ์—†๋‹ค. ํ˜„์ˆ˜๋Š” C๋งˆ๋ฆฌ์˜ ๋ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ง๋“ค์€ ์„œ๋กœ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‘ ๋ง์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๊ฒŒ ๋ง์„ ๋งˆ๊ตฌ๊ฐ„์— ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ๋‹ค.

 

์ž…๋ ฅ: ์ฒซ์งธ์ค„์— ์ž์—ฐ์ˆ˜ N๊ณผ C์˜ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ์ค„์— ๋งˆ๊ตฌ๊ฐ„์˜ ์ขŒํ‘œ๊ฐ€ ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ: ์ฒซ ์ค„์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‘ ๋ง์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

// ์ž…๋ ฅ
5 3
1 2 8 4 9

// ์ถœ๋ ฅ
3

 

์ด ๋ฌธ์ œ๋ฅผ ์™œ Parametric Search ์œผ๋กœ ํ’€์–ด์•ผ ํ•˜๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‘ ๋ง์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ณ„์† ์ฐพ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ๋ง์˜ ๊ฑฐ๋ฆฌ(์ถœ๋ ฅ)๊ฐ€ 2๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, C๋งˆ๋ฆฌ์˜ ๋ง์„ ๋งˆ๊ตฌ๊ฐ„์˜ ์ขŒํ‘œ ๋‚ด์— ๋ชจ๋‘ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๊ฒƒ์ด ์ตœ์ ์˜ ๋‹ต์ธ๊ฐ€?๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉด ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์™œ๋ƒ๋ฉด 3๋„ ๋งˆ๊ตฌ๊ฐ„์˜ ์ขŒํ‘œ ๋‚ด์— ๋ชจ๋‘ ๋ฐฐ์น˜ ํ•  ์ˆ˜ ์žˆ์Œ๊ณผ ๋™์‹œ์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‘ ๋ง์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ, 4๊ฐ€ ๋˜๋ฉด ์ˆ˜์ง์„  ์ƒ์— ์ตœ๋Œ€ 2๋งˆ๋ฆฌ๊นŒ์ง€ ๋ฐ–์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†๋‹ค. ์ด์ฒ˜๋Ÿผ ๋” ์ด์ƒ ํ•ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ Parametric Search๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค. ๋ณดํ†ต ๋ฒ”์œ„ ๋‚ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ์†Œ / ์ตœ๋Œ€ ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ๊ฑฐ๋‚˜, n์˜ ๊ฐ’์ด ๋„ˆ๋ฌด ํฌ๊ณ  ์ •๋ ฌ์„ ํ†ตํ•ด ๋‹ต์„ ์ฐพ๋Š”๋‹ค๋ฉด Parametric Search๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋กœ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ง์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ณ„์† ๊ฐฑ์‹ ํ•œ๋‹ค.

2. ์ฃผ์–ด์ง„ ์ขŒํ‘œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ๋ง ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

3. lt์™€ rt๋Š” ๋ง ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ์ธ๋ฐ lt๋Š” ๋ง์˜ ์ตœ์†Œ๊ฑฐ๋ฆฌ์ธ 1์ด๊ณ , rt๋Š” ๋ง์˜ ์ตœ๋Œ€๊ฑฐ๋ฆฌ์ธ arr[arr.length-1]์ด๋‹ค.

4. ๋ง ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ (mid)๊ฐ€ ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๋ง์„ ๋” ๋งŽ์ด ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, cnt(๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๋ฐฐ์น˜ํ•œ ๋ง์˜ ์ˆ˜)๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ c๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ์ฃผ์–ด์ง„ ์ˆ˜์ง์„  ์ƒ์—์„œ๋„ ๋ง์„ ๋” ๋งŽ์ด ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ c์™€ ๊ฐ™์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ฆฌ๋ฅผ ๋Š˜๋ ค์„œ ํƒ์ƒ‰ํ•œ๋‹ค.(lt=mid+1) ๋ฐ˜๋Œ€๋กœ, cnt<c์ผ ๋•Œ๋Š” ๋ง ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋„ˆ๋ฌด ํฌ๊ฒŒ ์žก์•„์„œ ์ˆ˜์ง์„  ์ƒ์— ๋ง์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ฆฌ๋ฅผ ์ขํ˜€์•ผ ํ•œ๋‹ค. (rt=mid-1)

5. ๊ฑฐ๋ฆฌ๋ฅผ ๋” ์ด์ƒ ์ขํžˆ๊ฑฐ๋‚˜ ๋„“ํž ์ˆ˜ ์—†์„ ๋•Œ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

 

728x90

 

let n = 5;
let c = 3;
let arr = [1, 2, 4, 8, 9];

console.log(solution(n, c, arr));

function solution(n, c, arr){
    arr.sort((a, b) => a-b);
    let lt = 1;
    let rt = arr[arr.length-1];
    let answer;

    while (lt <= rt){
        let mid = Math.floor((lt+rt)/2);
        let cnt=1;
        let endPoint = arr[0]

        for (let i=1; i<n; i++){
            if (arr[i]-endPoint >= mid){
                cnt++;
                endPoint=arr[i]
            }
        }

        if (cnt >= c){
            answer=mid;
            lt=mid+1;
        }else rt=mid-1

    }
    return answer;
}
๋ฐ˜์‘ํ˜•