🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

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

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

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

배열이나 리스트를 사용한다. 학생 정보는 보통 순차적으로 저장되고, 학생이 추가될 때마다 새로 입력되는 정보가 많지 않다. 배열이나 리스트를 사용하면 학생 정보를 인덱스로 쉽게 접근할 수 있으며, 추가나 삭제가 비교적 용이하다. 배열을 사용하면 데이터에 빠르게 접근할 수 있고, 리스트는 동적으로 크기를 조정할 수 있어 유연성이 높다.

 

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

큐를 사용한다. 큐는 선입선출(FIFO, First In First Out) 방식으로 데이터를 처리하기 때문이다. 즉, 주문이 들어온 순서대로 처리되어야 하므로 큐 자료구조가 가장 적합하다. 큐는 첫 번째로 들어온 주문이 가장 먼저 처리되도록 하여, 고객의 요구 사항을 충족시킬 수 있다.

 

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

import { LinkedList } from './LinkedList.mjs';

class Stack {

    constructor() {
        this.list = new LinkedList();
    }

    push(data) {
        this.list.insertAt(this.list.count, data);
    }

    pop() {
        try {
            return this.list.deleteAt(this.list.count - 1);
        } catch (e) {
            return null;
        }
    }

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

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

export { Stack };

 

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

힌트: charCodeAt() 함수를 이용

예시: name1 = "이운재";

name1.charCodeAt(0); // 51060  이운재의 0번 인덱스 ‘이’의 유니코드 출력

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

댓글을 작성해보세요.

채널톡 아이콘