본문 바로가기
CS/알고리즘&자료구조

ChatGPT와 함께하는 알고리즘 공부(1) - 스택, 큐

by 새파란레몬 2023. 11. 23.

카카오 코테가 5일 남았는데, ChatGPT에게 이에 대한 계획표를 짜달라고 했다. 

 

최종 점검이랑 휴식시간까지 챙겨주는 엄청난.... 근데 알고리즘을 이틀만에 정복하는 거 맞을까?

 

알고리즘 강의도 듣고 문제도 조금씩 풀어보았지만, 체득해서 코테를 푼다는 느낌은 없었어서 취업 대비 제대로 공부해 보려고 한다.  

 

우선, 스택과 큐의 JS 코드를 알려달라 했다.

 

1. 스택

class Stack {
    constructor() {
        this.items = [];
    }

    // 요소 추가
    push(element) {
        this.items.push(element);
    }

    // 가장 최근에 추가된 요소 제거 및 반환
    pop() {
        if (this.items.length === 0) return "Stack is empty";
        return this.items.pop();
    }

    // 가장 최근에 추가된 요소 확인
    peek() {
        return this.items[this.items.length - 1];
    }

    // 스택이 비어있는지 확인
    isEmpty() {
        return this.items.length === 0;
    }

    // 스택의 크기 반환
    size() {
        return this.items.length;
    }

    // 스택 초기화
    clear() {
        this.items = [];
    }
}

 

js에서 [ ]로 빈 array를 지정하고 pushpop을 통해 스택의 FILO(First In Last Out)의 구조를 구현하는 게 핵심인 듯하다.

일반적인 구글링으로 찾을 수 있는 스택의 코드보다 더 자세하게 알려준 것이 좋았다.

 

2. 큐

class Queue {
    constructor() {
        this.items = [];
    }

    // 요소 추가
    enqueue(element) {
        this.items.push(element);
    }

    // 가장 먼저 추가된 요소 제거 및 반환
    dequeue() {
        if (this.isEmpty()) return "Queue is empty";
        return this.items.shift();
    }

    // 가장 먼저 추가된 요소 확인
    front() {
        if (this.isEmpty()) return "Queue is empty";
        return this.items[0];
    }

    // 큐가 비어있는지 확인
    isEmpty() {
        return this.items.length === 0;
    }

    // 큐의 크기 반환
    size() {
        return this.items.length;
    }
}

 

큐도 마찬가지로 스택과 비슷한 형태의 구조를 알려주었다. 다만 pushshift를 이용해 FIFO(First In First Out) 의 구조를 만들어주었다.

JS에서 array에서 값을 삽입하고 제거하는 4개의 함수가 있다.

값 추가 : push, unshift
값 제거 : pop, shift


(출처는 그림을 클릭하면 원본 출처와 연결되게 해두었다.)

shift와 unshift 는 앞 쪽인 array[0]에서 값을 삽입, 제거하고
pop과 push는 뒷 부분인array[array.length-1] 값을 삽입, 제거한다.

위의 요소를 조합하여 스택과 큐의 특징을 구현할 수 있다.