[Front-end๐Ÿฆ] #33 ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (Stack, LinkedList)

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

front-end

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

์˜ค๋Š˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฒ˜์Œ ๋‚˜๊ฐ„ ๋‚ ์ด์—ˆ๋‹ค. ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ํ’€์ง„ ์•Š์•˜์ง€๋งŒ, C++๋„ ์•„๋‹ˆ๊ณ  ๊ธฐ๋ณธ C๋ฅผ ์“ฐ๋˜ ๋‚˜์—๊ฒŒ๋Š” js์— ์žˆ๋Š” ์•„๋ฆ„๋‹ค์šด ๋นŒํŠธ์ธ ํ•จ์ˆ˜๋“ค์„ ์“ฐ๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ์ข‹์€ ๊ธฐํšŒ์˜€๋‹ค! ํŒŒ์ด์ฌ์—๋„ ๋Œ€์ฒด๋กœ ์žˆ์œผ๋‹ˆ๊นŒ ์ฐพ์•„๋ณด๊ณ  ํ’€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. Swift๋กœ๋„... ํ’€์–ด์•ผ์ง€...


1. ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ปดํ“จํ„ฐ๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•Œ๋ ค์ค˜์•ผ ํ•˜๋Š” ์ˆœ์„œ, ์ ˆ์ฐจ

<์ธก์ • ๋ฐฉ๋ฒ•>
1. ์‹œ๊ฐ„ ๋ณต์žก๋„
2. ๊ณ„์‚ฐ ๋ณต์žก๋„ - Big O
3. ๊ณต๊ฐ„ ๋ณต์žก๋„

coding test tipsโœจ

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, ๊ตฌ๋ฆ„ EDU ๊ฐ™์€ ํ”Œ๋žซํผ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ.
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์–ธ์–ด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ธฐ.
  • ์ฝ”๋“œ ์Šค๋„คํ• (ํŠธ๋ฆฌ, ๊ฒ€์ƒ‰, ์ˆœ์—ด, ์กฐํ•ฉ, ์ตœ๋‹จ๊ฒฝ๋กœ), Cheat Shetet์™€ A4 ์šฉ์ง€๋Š” ๋ฏธ๋ฆฌ ์ค€๋น„
  • ์œ ์šฉํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•ด๋‘๊ธฐ
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ผฌ์˜ฅ!




2. ๋ฌธ์ œํ’€์ด

1. 8์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๋ฌธ์ œ1

ํ•ต์‹ฌ ์ฝ”๋“œ

// ์™€ ์ฒœ์žฐ๋ฐ ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฒƒ์„ ๋ฌธ์ž์—ด๋กœ ๋‹ค ํ•ฉ์ณ๋†“๊ณ 
// 8์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๋ฉด 8๊ฐœ์ˆ˜ + 1 ๋งŒํผ ๋‚˜๋ˆ ์ง€๋‹ˆ๊น
// -1 ํ•˜๋ฉด 8์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.
Array(100).fill(1).map((value, index) => value + index + '').split('8').length - 1;

2. ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๊ฒƒ์˜ ์Œ ์ถœ๋ ฅ

๋ฌธ์ œ2

ํ•ต์‹ฌ ์ฝ”๋“œ - 1๋ฒˆ์งธ ๋ฐฉ๋ฒ•

// ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ์ธ์ ‘ ์ ๋“ค์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋„ฃ๊ณ 
for(let i = 0; i < s.length - 1; i++) {
    arr.push(s[i+1] - s[i]);
}
// ๊ฑฐ๋ฆฌ ์ตœ์†Œ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” index๋ฅผ ์ฐพ์•„์„œ ํ•ด๋‹น ์ ๊ณผ ๊ทธ ๋‹ค์Œ ์  ์ถœ๋ ฅ.
let result = arr.indexOf(Math.min(...arr));
console.log(`(${s[result]}, ${s[result + 1]})`);

ํ•ต์‹ฌ ์ฝ”๋“œ - 2๋ฒˆ์งธ ๋ฐฉ๋ฒ•

// ๋‘๊ฐœ์”ฉ array์— ๋„ฃ์–ด๋†“๊ณ  ์ด์šฉ
const zip = (a,b) => a.map((value, index) => [value, b[index]]);
let pairs = zip(s.slice(0, s.length-1), s.slice(1));
// ๊ทธ๋ฆฌ๊ณ  ์ •๋ ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ •๋ ฌ.
// ๋Œ€์‹  ๋ฌธ์ œ ์ƒํ™ฉ์— ๋งž์ถฐ์„œ ์ฐจ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•œ๋‹ค.
function compare(a, b) {
    if( a[1] - a[0] < b[1] - b[0] ) {
        return -1;
    }
    if ( a[1] - a[0] > b[1] - b[0] ) {
        return 1;
    }
    return 0;
}
pairs.sort(compare);
console.log(pairs[0]);
  • ๋‚˜ ๊ฐ™์œผ๋ฉด ๊ทธ๋ƒฅ for๋ฌธ์—์„œ ์ตœ์†Ÿ๊ฐ’, ์ตœ์†Œ ์ธ๋ฑ์Šค ์ €์žฅํ•ด๋†“๊ณ  ๋”ฐ๋กœ ๊ฑฐ๋ฆฌ ์ฐจ๋ฅผ ๋ฐฐ์—ด์— ์•ˆ๋„ฃ๊ณ  ํ’€์—ˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ ‡๊ฒŒ๋„ ํ’€ ์ˆ˜ ์žˆ๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค.
  • ๋งŒ์•ฝ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ• ๊ฑฐ๋ฉด, min ์ดˆ๊ธฐ๊ฐ’์— Infinity ๋Œ€์‹  Number.MAX_SAFE_INTEGER ๋„ฃ์ž.




3. ์ž๋ฃŒ๊ตฌ์กฐ

1. Stack

์œ„๋งŒ ์—ด๋ ค์žˆ์–ด์„œ ์œ„๋กœ๋งŒ ๋„ฃ์—ˆ๋‹ค ๋บ๋‹ค ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ

class Stack {
  constructor() {
      this.arr = [];
  }
  push(data) {
      this.arr.push(data);
  }
  pop(index = this.arr.length - 1) {
    // ์›๋ž˜๋Š” index ์—†์ง€๋งŒ ๋„ฃ์–ด์„œ ๊ตฌํ˜„ํ•ด ๋ด„.
    if (index === this.arr.length - 1) {
        return this.arr.pop();
    }
    let result = this.arr[index];
    this.arr = [...this.arr.slice(0, index)] + [...this.arr.slice(index + 1)];
    return result;
  }
  empty() {
      return (this.arr.length == 0) ? true : false;
  }
  top() {
      return this.arr[this.arr.length - 1];
  }
  bottom() {
      return this.arr[0];
  }
}
let s = new Stack();
s.push(10);
s.pop();
s.top();
s.bottom();
s.empty();

2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Lineked List)

class Node {
    constructor(data) {
        this.data = data;
        this.next = null;
    }
}
class LinkedList {
    constructor() {
        let init = new Node('init');
        this.head = init;
        this.tail = init;
        this.ํ˜„์žฌ๋…ธ๋“œ = undefined;
        this.๋ฐ์ดํ„ฐ์ˆ˜ = 0;
    }
    get fullData() {
        let currentNode = this.head;
        currentNode = currentNode.next;
        let s = ''
        for (let i = 0; i < this.๋ฐ์ดํ„ฐ์ˆ˜; i++) {
            s += `${currentNode.data}, `;
            currentNode = currentNode.next;
        }
    }
    length() {
        return this.๋ฐ์ดํ„ฐ์ˆ˜;
    }
    append(data) {
        let newNode = new Node(data);
        // ๋งˆ์ง€๋ง‰ ๊ฐ’์€ ์ƒˆ๋กœ์šด ๋…ธ๋“œ
        this.tail.next = newNode;
        // ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ
        this.tail = newNode;
        this.๋ฐ์ดํ„ฐ์ˆ˜ += 1;
    }
    toString() {
        let currentNode = this.head;
        currentNode = currentNode.next;
        let s = [];
        while (currentNode) {
            s.push(currentNode.data);
            currentNode = currentNode.next;
        }
        return `${s.join(' -> ')}`
    }
    insert(index, data) {
        let currentNode = this.head;
        currentNode = currentNode.next;
        for(let i = 0; i < index; i++) {
            currentNode = currentNode.next;
        }
        let newNode = newNode(data);
        newNode.next = currentNode.next;
        currentNode.next = newNode;
        this.๋ฐ์ดํ„ฐ์ˆ˜ += 1;
    }
}




2. ์ž‘์€ ํšŒ๊ณ 

1. ์˜ค๋Š˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ 2๊ฐœ ํ’€์—ˆ๋‹ค.

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

2. ์ž๋ฃŒ๊ตฌ์กฐ ์Šคํƒ, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณต๋ถ€ํ–ˆ๋‹ค.

  • ์œ„์— ์ •๋ฆฌํ•œ ์ง์ ‘ ๊ตฌํ˜„๋ฒ• ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ ์ „์—
  • ํ•™๊ต ์ˆ˜์—…์—์„œ ๋“ค์—ˆ๋˜.. ์ˆ˜์—… ์ž๋ฃŒ๋กœ ๊ฐœ๋… ๋ณต์Šตํ•˜๊ณ 
  • C๋กœ๋„ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

+ ์ง€๊ธˆ ๋“ค์–ด์™€๋ณด๋‹ˆ๊นŒ ํด๋ก  ์Šคํ„ฐ๋”” ํ•ด์•ผ์ง€... ์ˆ˜์—… ๋ณต์Šต๋„ ํ•ด์•ผ์ง€.. ์‹ฌ์ง€์–ด ์ง€๋‚œ์ฃผ์—๋Š” ๋ฉด์ ‘๊ฐ€๊ณ  ํšŒ์‹๊ฐ€๊ณ .. ๋„ˆ๋ฌด ์ •์‹  ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๋”ฅ๋‹ค์ด๋ธŒ๊ฐ€ ๋จผ์ € ๋‚™์˜ค๋๋‹ค.... ์ด์ œ ๋ฉด์ ‘์€ ์—†์œผ๋‹ˆ๊นŒ ์ˆ˜์—… ๋ณต์Šต -> ํด๋ก  -> ๋”ฅ๋‹ค์ด๋ธŒ ์ˆœ์œผ๋กœ ๋‹ฌ๋ ค๋ณด์ž๊ณ !!!




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

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