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

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

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

ํƒ๋ฐฐ์ƒ์ž์˜ ํฌ๊ธฐ๋Š” ๋ชจ๋‘ ๊ฐ™๊ณ , ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋ฅผ ํ†ตํ•ด ์˜์žฌ์—๊ฒŒ ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ˆœ์„œ๋Œ€๋กœ ํŠธ๋Ÿญ์— ์‹ฃ๊ฒŒ ๋˜๋ฉด ๋ฐฐ๋‹ฌ ์ˆœ์„œ์™€ ๋‹ฌ๋ผ ์ฐจ์งˆ์ด ์ƒ๊ธด๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ฐ•์Šค๋Š” 1, 2, 3, 4, 5๋กœ ์˜ค์ง€๋งŒ ํŠธ๋Ÿญ์—” 3, 2, 5, 1, 4๋กœ ์‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ทธ ์ƒ์ž๋ฅผ ์ž ์‹œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋ณด๊ด€ํ•ด์•ผํ•œ๋‹ค.
(๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ๋Š” ์Šคํƒ ๊ตฌ์กฐ๋กœ ๋จผ์ € ๋„ฃ์€ ๋ฐ•์Šค๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.)

ํŠธ๋Ÿญ์— ๋ฐ•์Šค๋ฅผ ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ.


์ ‘๊ทผ ๋ฐฉ๋ฒ•

์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ์ ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์Šคํƒ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์„œ๋ธŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  order์˜ box๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜์˜€๋‹ค.
(box : ํŠธ๋Ÿญ์˜ ์š”๊ตฌ ๋ฐ•์Šค, subIndex : ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋Œ€๊ธฐ ์ค‘์ธ ๋ฐ•์Šค, subContainer : ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ)

1. box > subIndex ์ธ ๊ฒฝ์šฐ
if( box > subIndex ){
    while(box !== subIndex){
        subContainer.push(subIndex);
        subIndex++;
    }
}โ€‹

box === subIndex๊ฐ€ ๋ ๋•Œ ๊นŒ์ง€ ํ˜„์žฌ ๋ฐ•์Šค๋ฅผ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์— ๋„ฃ๊ณ , ๋‹ค์Œ ๋ฐ•์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.


2. box === subIndex์ธ ๊ฒฝ์šฐ

if( box === subIndex ){
    answer++;
    subIndex++;
    continue;
}

 

ํŠธ๋Ÿญ์— ๋ฐ•์Šค๋ฅผ ๋„ฃ๊ณ  ๋‹ค์Œ ๋ฐ•์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

3. box === subContainer.pop() ์ธ ๊ฒฝ์šฐ
else if(box === subContainer.pop()){
    answer++;
    continue;
}โ€‹

ํŠธ๋Ÿญ์— ๋ฐ•์Šค๋ฅผ ์‹ฃ๊ณ  ๋‹ค์Œ order์„ ์ง„ํ–‰ํ•œ๋‹ค.

4. box !== subIndex์ด๊ณ  box !== subContainer.pop() ์ธ ๊ฒฝ์šฐ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ•์Šค๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฉˆ์ถ˜๋‹ค.

 

function solution(order) {
    var answer = 0;
    const subContainer = [];
    let subIndex = 1;

    for(let i = 0; i < order.length; i++){
        const box = order[i];
        if( box > subIndex ){
            while(box !== subIndex){
                subContainer.push(subIndex);
                subIndex++;
            }
        }

        if( box === subIndex ){
            answer++;
            subIndex++;
            continue;
        }else if(box === subContainer.pop()){
            answer++;
            continue;
        }else break;
    }

    return answer;
}