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

  1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.

이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.

학생의 정보는 전학, 퇴학이 아니라면 자주 수정되는 것이 아니고, 자료의 참조가 빈번하게 사용될 것으로 예상되므로

삽입/삭제, 쓰기 성능에 큰 무게를 두지 않고 읽기 성능이 빠른 자료구조를 선택할 것이다.

 

우선, 인덱스를 참조하는 자료구조를 선택할텐데 연결리스트는 이에 해당하지 않고

배열 또는 해시 테이블을 선택할 것인데,

빈번하진 않더라도 일단 학생의 정보를 저장(삽입/삭제)하긴 해야 하기때문에

정보의 삽입 삭제 연산이 더 좋은 해시 테이블을 선택한다.

 

 

 

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

선입선출 구조를 이야기하고 있다. 이는 Queue 구조를 말하고 있으므로 Queue 자료구조를 선택한다.

 

 

 

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

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

int pop(){
    if(this.list.count == 0)
        return null;

    return this.list.deleteAt(this.list.count-1);
}

 

 

 

 

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

int hashFunction(name){
    int AsciiName = name.charCodeAt(0)
    int result = AsciiName - 44032
    return result % 588;
}

 

 

댓글을 작성해보세요.


채널톡 아이콘