[Front-end๐Ÿฆ] #35 ์•Œ๊ณ ๋ฆฌ์ฆ˜ / ์ด์ง„ํŠธ๋ฆฌ

๋˜์ƒยท2021๋…„ 12์›” 16์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
49/58
post-thumbnail

1. ์ฝ”ํ…Œ ๋ฌธ์ œํ’€์ด

๋ฌธ์ œ ํ’€์ด๋Š” ์ „๋ถ€ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค์ด๋ผ์„œ ์„œ๋ก ์„ ์„ค๋ช…ํ•˜์‹ค ๋•Œ ํŒŒ์ด์ฌ์œผ๋กœ ํ›„๋”ฑ ํ’€๊ณ  ์„ค๋ช… ๋“ค์œผ๋ฉด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฐธ๊ณ ํ•  ์ ์ด๋‚˜, ๋‚ด ๋กœ์ง์—์„œ ์ˆ˜์ •ํ•  ์ ์„ ์ฒดํฌํ–ˆ๋‹ค.

1. ๋น„๋ฐ€์ง€๋„

์ „์— ์ •๊ทœํ‘œํ˜„์‹ ์ฒ˜์Œ ๋‚˜์˜ฌ ๋•Œ ์–ธ๊ธ‰ํ•˜์‹  ๋ฌธ์ œ๋ผ์„œ ์ •๊ทœ์‹์œผ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ •๊ทœ์‹์€ ์‚ฌ์‹ค ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด ๋ช‡ ๊ฐœ ๋นผ๊ณ ๋Š” ๋‹ค ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ.. ์ •๊ทœ์‹ ๋ชจ๋“ˆ ํ•จ์ˆ˜๋“ค์ด ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค. ํŒŒ์ด์ฌ re ๋ฌธ์„œ, apple regex ๋ฌธ์„œ ์ •๋… ํ•„์ˆ˜

๋น„๋ฐ€ ์ง€๋„

2. ๋‹คํŠธ ๊ฒŒ์ž„

๋‹คํŠธ ๊ฒŒ์ž„์€ ๊ณต๊ต๋กญ๊ฒŒ๋„.. ์ €๋ฒˆ์ฃผ ์Šคํ„ฐ๋”” ๋ฌธ์ œ์˜€๋Š”๋ฐ ์ €๋ฒˆ ์ฃผ์— ๋„ˆ๋ฌด ๋ฐ”๋น ์„œ ๋ชปํ’€๋‹ค๊ฐ€ ์–ด์ œ ํ‘ผ!! ๋ฌธ์ œ์˜€๋‹ค. ์„ ์ƒ๋‹˜์˜ ํ’€์ด๊ฐ€ ๋‚ด ํ’€์ด๋ž‘์€ ์กฐ๊ธˆ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ, ๊ธฐ๋ณธ ๋กœ์ง์€ ๊ฐ™์•˜๋‹ค.

๋‹คํŠธ ๊ฒŒ์ž„

3. ์บ์‹œ

์บ์‹œ๋Š” LRU๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋Š”๋ฐ, ์บ์‹œ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ํ•˜๋‚˜ ๋นผ๋จน๊ณ .. ๋ฌธ์ œ๋ฅผ ๋„ˆ๋ฌด ์„ธ๋ถ„ํ™”ํ•ด์„œ ํ’€์—ˆ๋‹ค๊ฐ€ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์Œ์„ ๊นจ๋‹ซ๊ณ  ๋งˆ์ง€๋ง‰์— ์••์ถ•ํ–ˆ๋‹ค.

์บ์‹œ




2. ์ด์ง„ํŠธ๋ฆฌ

class Node {
    constructor(data){
        this.data = data;
        // this.child = []; // 2์ง„ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŠธ๋ฆฌ๊ฐ€ ๋จ
        this.left = null;
        this.right = null;
    }
}
class Tree {
    constructor(data) {
        let init = new Node(data);
        this.root = init;
        this.๋ฐ์ดํ„ฐ์ˆ˜ = 0;
    }

    length(){
        return this.๋ฐ์ดํ„ฐ์ˆ˜;
    }

    insert(data){
        let ์ƒˆ๋กœ์šด๋…ธ๋“œ = new Node(data);
        let ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ = this.root;

        while(์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ){
            if (data === ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.data){
                // ์ค‘๋ณต๋œ ๊ฐ’์€ ํƒˆ๋ฝ!
                return;
            }
            if (data < ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.data){
                // ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์œผ๋ฉด ์™ผ์ชฝ
                // ๋น„์–ด์žˆ์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ํƒ€๊ณ  ๋˜ ๋‚ด๋ ค๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.
                if (!์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.left){
                    ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.left = ์ƒˆ๋กœ์šด๋…ธ๋“œ;
                    return;
                }
                ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ = ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.left;
            }
            if (data > ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.data){
                if (!์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.right){
                    ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.right = ์ƒˆ๋กœ์šด๋…ธ๋“œ;
                    return;
                }
                ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ = ์ˆœํšŒ์šฉํ˜„์žฌ๋…ธ๋“œ.right;
            }
        }
        this.๋ฐ์ดํ„ฐ์ˆ˜ += 1;
    }

    DFS(){
        // ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰, DFS(Depth First Search)
        // Stack ์ด์šฉ!
        let ๊ฒฐ๊ณผ๊ฐ’ = [];
        let ์Šคํƒ = [this.root];
        
        while(์Šคํƒ.length !== 0){
            let current = ์Šคํƒ.pop();
            if (current.right) {
                ์Šคํƒ.push(current.right);
            }
            if (current.left) {
                ์Šคํƒ.push(current.left);
            }
            ๊ฒฐ๊ณผ๊ฐ’.push(current.data);
        }
        return ๊ฒฐ๊ณผ๊ฐ’;
    }

    BFS(){
        // BFS๋Š” DFS์˜ ์Šคํƒ์„ ํ๋กœ๋งŒ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
        // .pop() ๋Œ€์‹  .shift()
    }
}

+ ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ : ๋ถˆ๊ท ํ˜•ํ•œ ์ด์ง„ํŠธ๋ฆฌ๊ฐ€ ์ƒ๊ฒจ์„œ ํƒ์ƒ‰ ํšจ์œจ์ด ์•ˆ์ข‹์•„์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ.

  • ๋ฃจํŠธ์™€ ์ž์‹์€ ๋ชจ๋‘ ๋ธ”๋ž™!
  • ๋ ˆ๋“œ๋Š” ์ž์‹์ด ๋ชจ๋‘ ๋ธ”๋ž™์ด์–ด์•ผ ํ•จ.
  • ๋ธ”๋ž™์€ ์ž์‹์ด ์–ด๋–ค ์ƒ‰์ด์–ด๋„ ๊ดœ์ฐฎ๋‹ค.
  • BFS๋ฅผ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋„ฃ์„ ์ž๋ฆฌ๋ฅผ ํŒ๋‹จ. (์ด์ง„ํŠธ๋ฆฌ๋Š” ๊ทธ๋ƒฅ ์ž‘์œผ๋ฉด ์™ผ์ชฝ ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ)




profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€