๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[Javascript/PGS] Lv.3 : ํ‘œ ํŽธ์ง‘ (์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ)

by xxilliant 2025. 5. 14.
728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/81303#

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 3. ์ •๋‹ต๋ฅ  40%

 

 

์ฒซ ์‹œ๋„์—์„œ Map์„ ํ™œ์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํšจ์œจ์„ฑ ์‹คํŒจ..!ใ… ใ… 

๋‹จ์ˆœ ๊ตฌํ˜„์ด ์•„๋‹ˆ๋ผ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค ๐Ÿคฏ

 

๊ทธ๋ž˜์„œ next, prev ๋ฐฐ์—ด์— ๊ฐ๊ฐ ๋‹ค์Œ/์ด์ „ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด์ฃผ๋ฉฐ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒˆ๋‹ค.

์ด๊ฑด ์‹ค์ œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฒ•์€ ์•„๋‹ˆ๊ณ , ๋ฐฐ์—ด๋กœ ์ž‘๋™ ๋ฐฉ์‹์„ ๋ชจ๋ฐฉํ•œ ๊ฒƒ์ด๋‹ค!

์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ์“ฐ๋ฉด ๋œ๋‹ค

class Node {
    constructor(index) {
        this.index = index;
        this.prev = null;
        this.next = null;
    }
}

 

์ธ๋ฑ์Šค ์—ฐ๊ฒฐ์‹œํ‚ค๋А๋ผ ๋จธ๋ฆฌ ํ„ฐ์งˆ ๋ป” ํ–ˆ๋Š”๋ฐ ๋ˆ๊ธฐ๋กœ ๋ถ™์žก๊ณ  ํ•ด๊ฒฐ ์™„....๐Ÿฅน

 

 

๋‚˜์˜ ํ’€์ด (๋ฐฐ์—ด ํ™œ์šฉ)

function solution(n, k, cmd) {
    let nowIdx = k;
    let deleted = [];
    let next = new Array(n).fill().map((_,i)=>i+1);
    let prev = new Array(n).fill().map((_,i)=>i-1); // ์ฒซ ์ธ๋ฑ์Šค์˜ prev๋Š” -1
    next[n-1] = -1; // ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์˜ next๋Š” -1
    
    cmd.forEach(word=>{
        if(word[0]=='U'){
            let num = word.split(' ')[1];
            // num๋งŒํผ prev๋ฅผ ๋”ฐ๋ผ ์ด๋™
            while(num>0) {
                if(prev[nowIdx]<0) break;
                nowIdx = prev[nowIdx];
                num--;
            }
        }
        if(word[0]=='D'){
            let num = word.split(' ')[1];
            // num๋งŒํผ next๋ฅผ ๋”ฐ๋ผ ์ด๋™
            while(num>0) {
                if(next[nowIdx]<0) break;
                nowIdx = next[nowIdx];
                num--;
            }
        }
        if(word[0]=='C'){
            deleted.push([nowIdx,prev[nowIdx],next[nowIdx]]);
            // ์ด์ „๊ฐ’์˜ next๋ฅผ ํ˜„์žฌ๊ฐ’ next๋กœ, ๋‹ค์Œ๊ฐ’์˜ prev๋ฅผ ํ˜„์žฌ๊ฐ’ prev๋กœ ์ด์–ด์คŒ
            if(prev[nowIdx]!=-1) next[prev[nowIdx]] = next[nowIdx];
            if(next[nowIdx]!=-1) prev[next[nowIdx]] = prev[nowIdx];
            
            nowIdx = next[nowIdx]<0? prev[nowIdx] : next[nowIdx];
        }
        if(word[0]=='Z' && deleted.length>0){
            let [idx,P,N] = deleted.pop();
            if(P!=-1) next[P] = idx;
            if(N!=-1) prev[N] = idx;
        }
    })
    
    const answer = Array(n).fill('O');
    for (let [i,P,N] of deleted) {
        answer[i] = 'X';
    }
    
    return answer.join('');
}

728x90
๋ฐ˜์‘ํ˜•