๐Ÿ”ข Algorithm

[Javascript][Programmers] ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

์œค๋„๊ธฐ 2024. 8. 16. 10:53
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ

๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ์กฐ๊ฑด์— ๋”ฐ๋ฅด๋ฉด, ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ธฐ๋Šฅ๋“ค ๊ฐ„์˜ ์„ ํ›„ ๊ด€๊ณ„์™€ ์˜์กด์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ(Queue)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 

๋‚˜์˜ ํ’€์ด

  • ์‹œ๊ฐ„๋ณต์žก๋„: O(N)
function solution(progresses, speeds) {
    const answer = [];
    // ๊ฐ ์ž‘์—…์˜ ์™„๋ฃŒ ์ผ์ˆ˜ ๊ณ„์‚ฐ
    let days = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i]));

    let dDay = days[0];
    let count = 0;

    for (let day of days) {
        if (day <= dDay) {
            count++;
        } else {
            answer.push(count);
            count = 1;
            dDay = day;
        }
    }

    answer.push(count); // ๋งˆ์ง€๋ง‰ ๋‚จ์€ ๋ฐฐํฌ ์ž‘์—… ์ถ”๊ฐ€

    return answer;
}

๊ฐ ์ž‘์—…์˜ ์™„๋ฃŒ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•œ ํ›„, ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์˜ ์™„๋ฃŒ ์ผ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ดํ›„ ์ž‘์—…๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ž‘์—…์ด ํ•ด๋‹น ์ผ์ˆ˜ ๋‚ด์— ์™„๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋™์ผํ•œ ๋ฐฐํฌ๋กœ ๋ฌถ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์ž‘์—…์˜ ์™„๋ฃŒ ์ผ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋’ค์˜ ์ž‘์—…๋“ค์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•