inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)

스택, 큐 연결리스트로 구현 과제 완료입니다!

해결된 질문

95

Eunji Lee

작성한 질문수 3

0

Stack

// 숙제: Stack을 LinkedList로 구현하기(단, 시간복잡도는 O(1))
class Stack {
  tail = null;
  length = 0;

  // 가장 마지막에 노드 추가
  push(value) {
    // 새로운 tail이 될 node 생성
    const node = new Node(value);

    // 바꿔치기를 위해 현재 tail은 curr 변수에 저장
    const curr = this.tail;

    // 새로운 tail을 추가하기
    this.tail = node;
    this.tail.prev = curr;

    // stack의 길이 추가
    this.length++;

    // 길이 리턴
    return this.length;
  }

  // 가장 마지막 노드 제거
  pop() {
    if (!this.tail) {
      // tail이 없는 경우 pop할 값이 없기 때문에 아무 동작도 하지 않음
    } else {
      // pop될 node의 value를 변수에 저장 > 리턴 예정
      const value = this.tail?.value;

      // 현 tail의 prev 값을 변수에 할당 > 새 tail이 될 예정
      const prev = this.tail.prev;

      // 바꿔치기
      this.tail = prev;

      // stack의 길이 줄이기
      this.length--;

      // pop된 기존 tail의 value 리턴
      return value;
    }
  }

  // Stack의 가장 마지막 원소 조회
  top() {
    return this.tail?.value;
  }
}

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

const stack = new Stack();
console.log(stack);

console.log(stack.push(3)); // 1
console.log(stack.push(1)); // 2
console.log(stack.push(5)); // 3
console.log(stack.push(2)); //4
console.log(stack.push(4)); //5

console.log(stack.pop()); // 4 > pop된 가장 마지막 값 리턴
console.log(stack.top()); // 2
console.log(stack.pop()); // 2 > pop된 가장 마지막 값 리턴
console.log(stack.pop()); // 5 > pop된 가장 마지막 값 리턴
console.log(stack.pop()); // 1 > pop된 가장 마지막 값 리턴
console.log(stack.pop()); // 3 > pop된 가장 마지막 값 리턴
console.log(stack.pop()); // undefined

console.log(stack.top()); // undefined

console.log("stack");

Queue

// 숙제: Queue를 LinkedList로 구현하기(단, 시간복잡도는 O(1))
class Queue {
  head = null;
  tail = null;
  length = 0;

  // 가장 마지막에 노드 추가
  enqueue(value) {
    const node = new Node(value);

    if (!this.head) {
      this.head = node;
    } else {
      let currHead = this.head;
      while (currHead.next) {
        currHead = currHead.next;
      }
      currHead.next = node;
    }

    const currTail = this.tail;

    this.tail = node;
    this.tail.prev = currTail;

    this.length++;
    return this.length;
  }

  // 가장 맨 앞 노드 제거
  dequeue() {
    // head는 다음 값으로 변경
    const value = this.head.value;
    this.head = this.head.next;

    // tail에 연결된 가장 맨 앞 값 삭제 => 가장 맨 앞에서 두번째의 prev를 null로 만든다
    let currTail = this.tail;
    let prevTail;
    while (currTail?.prev) {
      prevTail = currTail;
      currTail = currTail.prev;
    }

    if (prevTail?.prev) {
      prevTail.prev = null;
    } else {
      this.tail = null;
    }

    this.length--;

    return value;
  }

  // Queue에서 가장 앞 쪽에 있는 값 조회
  peek() {
    return this.head.value;
  }
}

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

const queue = new Queue();

console.log(queue.enqueue(1)); // 1
console.log(queue.enqueue(3)); // 2
console.log(queue.enqueue(5)); // 3
console.log(queue.enqueue(2)); // 4
console.log(queue.enqueue(4)); // 5

console.log(queue.peek()); // 1

console.log("dequeue");

console.log(queue.dequeue()); // 1
console.log(queue.dequeue()); // 3
console.log(queue.dequeue()); // 5
console.log(queue.dequeue()); // 2
console.log(queue.dequeue()); // 4

console.log("queue");

javascript 코딩-테스트 알고리즘

답변 1

0

제로초(조현영)

잘 하셨습니다! 👍👍

0

Eunji Lee

감사합니다!

섹션2퀴즈는어디있나요?

0

7

0

연결리스트 삽입삭제 O(1) 아닌가요?

0

10

2

GROUP BY, HAVING 실습 1번문제

1

14

2

4 - A

0

21

2

heapify 안의 bigger 삼항연산자 질문

0

121

2

LinkedList로 스택, 큐 구현하기 숙제

0

126

1

linkedList prev와 tail 사용 후 o(1) 구현.

0

165

1

숙제 : LinkedList로 Stack, Queue 구현하기

0

178

1

연결리스트 숙제

0

242

1

한번에 이해 안가는 제가 비정상 일까요...?

0

237

1

우선순위 큐 질문이 있습니다!

0

155

1

[숙제] minHeap 구현, maxHeap -> minHeap , minHeap -> maxHeap

1

236

1

최소힙 remove 구현하기

0

247

1

숙제 최소힙 만들기

0

153

1

숙제 length return 하기

0

195

1

숙제 : 같은 값을 넣은경우 에러 처리

0

184

1

영상 중간에 0:10 1:23초 수정에 따른 코드 최종본

1

145

1

숙제2 연결리스트를 이용하여 큐 구현하기

0

241

1

숙제1 LinkedList로 스택 구현하기

1

253

1

연결 리스트 구현 숙제 리뷰 부탁드려봅니다

1

346

2

let current = this.head 질문 있습니다!

0

254

1

퀴즈 답안

0

471

1

최소힙의 결과값과 최대힙->최소힙 결과값이 다른게 맞나요?

0

249

1

1주차 숙제에 대한 해답 코드는 따로 제공되지 않나요??

0

499

1