๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] ์‹ค์ „ ๋Œ€๋น„ ๋ชจ์˜๊ณ ์‚ฌ 3์ฐจ 3๋ฒˆ

ํ™”๋ž‘์ด๋Š” distance๋กœ ์ฃผ์–ด์ง„ ๊ตฌ๊ฐ„๊นŒ์ง€ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๊ตฌ๊ฐ„ ๋‚ด์—๋Š” ๊ฒฝ๋น„๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฐ ๊ฒฝ๋น„์›์€ ์ž์‹ ์˜ ๊ตฌ๊ฐ„์„ ๊ฒฝ๋น„ํ•œ๋‹ค. (์ด๋•Œ ๊ฒฝ๋น„์‹œ๊ฐ„๊ณผ ํœด์‹์‹œ๊ฐ„์ด ์กด์žฌํ•œ๋‹ค.)
ํ™”๋ž‘์ด๋Š” ๊ฒฝ๋น„์›์˜ ๊ทผ๋ฌด์— ๋Œ€ํ•ด ์•„๋Š”๋ฐ”๊ฐ€ ์—†์œผ๋ฏ€๋กœ 1m/s์†๋„๋กœ ์ง์ง„๋งŒ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ํ™”๋ž‘์ด๊ฐ€ ์ตœ๋Œ€๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ.

๊ฒฝ๋น„ ๊ตฌ๊ฐ„ : scope
๊ฒฝ๋น„ ๊ทผ๋ฌด, ํœด์‹ ์‹œ๊ฐ„ : time


์ ‘๊ทผ ๋ฐฉ๋ฒ•

์กฐ๊ฑด 1  =>  0 < ๊ฒฝ๋น„ ๊ตฌ์—ญ์˜ ์‹œ์ž‘ % (๊ฒฝ๋น„์‹œ๊ฐ„ + ํœด์‹์‹œ๊ฐ„) <= ๊ฒฝ๋น„ ์‹œ๊ฐ„
์กฐ๊ฑด 2  =>  0 < ๊ฒฝ๋น„ ๊ตฌ์—ญ์˜ ๋ % (๊ฒฝ๋น„์‹œ๊ฐ„ + ํœด์‹์‹œ๊ฐ„) <= ๊ฒฝ๋น„ ์‹œ๊ฐ„
์ด๋ผ๋Š” ์กฐ๊ฑด ๋‚ด์—์„œ ํ™”๋ž‘์ด๋Š” ๋ถ™์žกํž ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์กฐ๊ฑด 1๊ณผ 2๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด

์กฐ๊ฑด 1.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ์ด๋ผ๋Š” ๊ตฌ๊ฐ„ ๋‚ด์—์„œ 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  => [4, 9] ๋ผ๋Š” ๊ฒฝ๋น„ ๊ตฌ์—ญ์ด ์ฃผ์–ด์งˆ๋•Œ
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [5, 3] ์ด๋ผ๋Š” ๊ทผ๋ฌด(๋นจ), ํœด์‹(ํŒŒ) ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๋ฉด

๊ฒฝ๋น„ ๊ตฌ์—ญ์˜ ์‹œ์ž‘(4) % ํ•ฉ์นœ ์‹œ๊ฐ„(8) <= 5(๊ทผ๋ฌด์‹œ๊ฐ„) ์ด๋ฏ€๋กœ ๊ทผ๋ฌด ์‹œ๊ฐ„๊ณผ ๊ตฌ๊ฐ„์ด ๊ฒน์น˜๊ฒŒ ๋˜๊ณ ,
์ด๋•Œ๋Š” ๊ฒฝ๋น„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•˜์ž๋งˆ์ž ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋ฏ€๋กœ ๊ฒฝ๋น„ ๊ตฌ์—ญ์˜ ์‹œ์ž‘์„ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์กฐ๊ฑด 2.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ์ด๋ผ๋Š” ๊ตฌ๊ฐ„ ๋‚ด์—์„œ 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  => [4, 8] ๋ผ๋Š” ๊ฒฝ๋น„ ๊ตฌ์—ญ์ด ์ฃผ์–ด์งˆ๋•Œ
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [2, 4] ์ด๋ผ๋Š” ๊ทผ๋ฌด(๋นจ), ํœด์‹(ํŒŒ) ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๋ฉด

๊ฒฝ๋น„ ๊ตฌ์—ญ์˜ ๋(8) % ํ•ฉ์นœ ์‹œ๊ฐ„(6) <= 2(๊ทผ๋ฌด์‹œ๊ฐ„) ์ด๋ฏ€๋กœ ๊ทผ๋ฌด ์‹œ๊ฐ„๊ณผ ๊ตฌ๊ฐ„์ด ๊ฒน์น˜๊ฒŒ ๋˜๊ณ ,
์ด๋•Œ๋Š” ๊ทผ๋ฌด ์‹œ๊ฐ„์ด ์‹œ์ž‘๋ ๋•Œ ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋ฏ€๋กœ ๊ทผ๋ฌด์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
(๋ช‡๋ฒˆ์งธ ๊ทผ๋ฌด ์‹œ์ž‘ ์‹œ๊ฐ„์ธ์ง€ ๊ณฑํ•ด์ค˜์•ผํ•œ๋‹ค. (ํ•ฉ์นœ ์‹œ๊ฐ„์ด ๋ช‡๋ฒˆ์˜ ์‚ฌ์ดํด์ด ๋Œ์•˜๋Š”์ง€))

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด

for(let i = 0; i < scope.length; i++){
    const workStart = Math.min(...scope[i]);
    const workEnd = Math.max(...scope[i]);
	
    // ์กฐ๊ฑด 1.
    if(0 < workStart % sumWorkRest[i] && workStart % sumWorkRest[i] <= times[i][0]){
        answer = workStart;
        break;
    }
    // ์กฐ๊ฑด 2.
    else if(0 < workEnd % sumWorkRest[i] && workEnd % sumWorkRest[i] <= times[i][0]){
        answer = (parseInt(workEnd / sumWorkRest[i]) * sumWorkRest[i]) + 1
        break;
    }
}

// ๋งŒ์•ฝ for๋ฌธ์„ ํ†ต๊ณผํ•˜๋ฉด distance๋ฅผ returnโ€‹

 

์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 42.9์  ๋ฐ–์— ์–ป์งˆ ๋ชปํ•œ๋‹ค.
์–ด๋”˜๊ฐ€ ์˜ˆ์™ธ ์ผ€์ด์Šค๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ฐพ์ง€ ๋ชปํ•˜์˜€๋‹ค.

 

function solution(distance, scope, times) {
    var answer = distance;
    let sumWorkRest = [];
    for(let time of times){
        sumWorkRest.push(time[0] + time[1]);
    }

    for(let i = 0; i < scope.length; i++){
        const workStart = Math.min(...scope[i]);
        const workEnd = Math.max(...scope[i]);

        if(0 < workStart % sumWorkRest[i] && workStart % sumWorkRest[i] <= times[i][0]){
            answer = workStart;
            break;
        }else if(0 < workEnd % sumWorkRest[i] && workEnd % sumWorkRest[i] <= times[i][0]){
            answer = (parseInt(workEnd / sumWorkRest[i]) * sumWorkRest[i]) + 1
            break;
        }
    }
    

    return answer;
}