[워밍업 클럽 3기 - CS 전공지식] 자료구조 미션 1주차

[워밍업 클럽 3기 - CS 전공지식] 자료구조 미션 1주차

자료구조

 

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

  • 저라면 학생의 정보를 저장하기 위해 해시테이블을 사용할 것입니다.학생들의 번호를 키값으로 사용하면, 다른 자료구조들보다 조회 성능이 좋을 것 같습니다.

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

  • 주문이 순서대로 처리되기 때문에 FIFO의 특징을 가진 덱을 사용하여 프로그램을 개발할 것입니다.

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

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

    push(data){
        this.list.insertAt( 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);
    }
}

4. 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요. 힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력

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

 

 

 

댓글을 작성해보세요.

채널톡 아이콘