๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ–ฅ dev-ruby

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]์ž…๊ตญ์‹ฌ์‚ฌ - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | ์ด๋ถ„ํƒ์ƒ‰ | Lv.3 ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]์ž…๊ตญ์‹ฌ์‚ฌ - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ | ์ด๋ถ„ํƒ์ƒ‰ | Lv.3

ruby_s 2022. 2. 12. 22:21
728x90
๋ฐ˜์‘ํ˜•
SMALL

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/43238

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ž…๊ตญ์‹ฌ์‚ฌ

n๋ช…์ด ์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ์œ„ํ•ด ์ค„์„ ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ž…๊ตญ์‹ฌ์‚ฌ๋Œ€์— ์žˆ๋Š” ์‹ฌ์‚ฌ๊ด€๋งˆ๋‹ค ์‹ฌ์‚ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ๋ชจ๋“  ์‹ฌ์‚ฌ๋Œ€๋Š” ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์‹ฌ์‚ฌ๋Œ€์—์„œ๋Š” ๋™์‹œ์— ํ•œ

programmers.co.kr

 

ํ’€์ด

function solution(n, times) {
    times.sort((a, b) => a - b);
    let min = times[0];
    let max = n * times[times.length -1];

    while(min <= max){
        const mid = Math.floor((min + max) / 2);
        const count = times.reduce((acc, curr) => acc + Math.floor(mid / curr), 0); // ํ•œ ์‚ฌ๋žŒ๋‹น ๋ช‡๋ช… ํ•  ์ˆ˜ ์žˆ๋Š”์ง€
        console.log(min, max, mid, count);
        count >= n ? max = mid - 1 : min = mid + 1;
    }
    return min;
}

 

1. ์ด๋ถ„ํƒ์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค.

times.sort((a, b) => a - b);

2. ๊ฐ€์žฅ ์ตœ์†Œ๋กœ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(min)๊ณผ ์ตœ๋Œ€๋กœ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(max)๋ฅผ ๋จผ์ € ๊ตฌํ•ด์ค€๋‹ค.

let min = times[0];
let max = n * times[times.length -1];

3. (์ตœ์†Œ+์ตœ๋Œ€)/2๋กœ ์‹œ๊ฐ„์˜ ์ค‘๊ฐ„๊ฐ’(mid)์„ ๊ตฌํ•œ๋‹ค.

const mid = Math.floor((min + max) / 2);

4. times๋ฅผ ๋Œ๋ฉด์„œ ๊ฐ ์‹ฌ์‚ฌ๊ด€ ํ•œ ์‚ฌ๋žŒ๋‹น mid ์‹œ๊ฐ„๋™์•ˆ ๋ช‡๋ช…์„ ์‹ฌ์‚ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ„์‚ฐ(Math.floor(mid / curr))ํ•ด์„œ ์ดํ•ฉ์„ ๊ตฌํ•œ๋‹ค. (acc์— ๋ˆ„์ ํ•ด์คŒ)

const count = times.reduce((acc, curr) => acc + Math.floor(mid / curr), 0);

5. ๋งŒ์•ฝ, mid์‹œ๊ฐ„ ๋™์•ˆ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์›์˜ ์ด ์ˆ˜(count)๊ฐ€ ์ฃผ์–ด์ง„ n๋ช…๋ณด๋‹ค ๋งŽ๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ,

  • max๋ฅผ mid ์ด์ „์œผ๋กœ ๋งŒ๋“ค์–ด ์™ผ์ชฝ ๊ณต๊ฐ„์„ ํƒ์ƒ‰ ๊ณต๊ฐ„์œผ๋กœ ์ •ํ•œ๋‹ค.

n๋ช…๋ณด๋‹ค ์ ์„ ๊ฒฝ์šฐ,

  • min์„ mid ๋‹ค์Œ์œผ๋กœ ๋งŒ๋“ค์–ด ์˜ค๋ฅธ์ชฝ ๊ณต๊ฐ„์„ ํƒ์ƒ‰ ๊ณต๊ฐ„์œผ๋กœ ์ •ํ•œ๋‹ค.
count >= n ? max = mid - 1 : min = mid + 1;

๊ทธ๋Ÿผ ์ตœ์ข… min๊ฐ’์ด n๋ช…์„ ์‹ฌ์‚ฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์ด๋‹ค.

 


 

๋Š๋‚€์ 

์ด๋ถ„ํƒ์ƒ‰์„ ๊ทธ๋ƒฅ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ์กฐ์ ˆํ•ด์„œ ํƒ์ƒ‰ํ•˜๋Š” ์šฉ, ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ’์—์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’๋งŒ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋กœ ์ด๋ถ„ํƒ์ƒ‰์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ๋˜๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™๋‹ค.
์ฒ˜์Œ์—๋Š” times ๋ฐฐ์—ด๋งŒ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ํƒ์ƒ‰ ๊ณต๊ฐ„์„ ์žก์„ ์ง€ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ..
๋ฌด์กฐ๊ฑด ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ mid๊ฐ’์„ ๊ตฌํ•ด์„œ์œ„์น˜๋งŒ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ฌธ์ œ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋‚ด๊ฐ€ ์ง์ ‘ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๊ณ  ํƒ์ƒ‰ํ•  ๊ณต๊ฐ„์˜ ๋ฒ”์œ„๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋ ‡๊ฒŒ ๋‚ด๊ฐ€ ์ •ํ•œ ๊ณต๊ฐ„์—์„œ ์ค‘๊ฐ„๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ์กฐ๊ฑด์„ ๋”ฐ์ ธ๋ณด๋Š” ์‹์œผ๋กœ ํ’€๋ฉด ๋ ๊ฑฐ๋‹ค..!
728x90
๋ฐ˜์‘ํ˜•
LIST