[인프런 워밍업 클럽 3기 - CS] 1주차 자료구조와 알고리즘 미션

[인프런 워밍업 클럽 3기 - CS] 1주차 자료구조와 알고리즘 미션

1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.

  • 해시 테이블 자료구조를 사용할 것 같다.

  • 학생의 번호를 key로 두고 관리하면 특정 학생을 번호만 가지고 O(1)의 성능으로 조회하고 정보를 업데이트하는 등으로 관리가 수월할 것 같다.

 

2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.

  • 큐 자료구조를 사용할 것 같다.

  • 먼저 들어온 주문은 먼저 처리되어야 하므로, 기본적으로 FIFO로 동작하는 큐 자료구조가 적합하다.

 

3. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.

import {DoublyLinkedList} from "./DoublyLinkedList.mjs";

class Stack {
  constructor() {
    this.list = new DoublyLinkedList();
  }

  push(data) {
    this.list.insertLast(data);
  }

  pop() {
    try {
      return this.list.deleteLast();
    } catch (e) {
      return null;
    }
  }

  peek() {
    return this.list.getNodeAt(this.list.count - 1);
  }

  isEmpty() {
    return (this.list.count === 0);
  }
}

export {Stack}

 

4. 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.

hashFunction(name) {
  let charCode = 0;
  for (let i = 0; i < name.length; i++) {
    charCode += name.charCodeAt(i);
  }
  return charCode % 10;
}

댓글을 작성해보세요.

채널톡 아이콘