🎁 모든 강의 30% + 무료 강의 선물🎁

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

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

 

자료구조와 알고리즘


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


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


    이유를 함께 적어주세요.

    Key 값으로 출석번호를 쓰고 Value로 이름을 저장하여, HashMap을 사용할 것 같습니다. 왜냐하면 본인의 출석번호는 대부분 알고 있기 때문에 출석번호를 알면 O(1)으로 학생의 이름을 찾을 수 있기 때문입니다.  또한 학생이 추가, 제거, 수정되었을 때도 직관적으로 출석번호를 알면 데이터를 수정할 수 있으므로 확장성에 용이하다고 생각합니다.

  2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.


    주문은 들어온 순서대로 처리됩니다.


    이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?
    이유를 함께 적어주세요.

    First In First Out의 Queue를 사용할 것 같습니다.
    들어온 순서대로 처리되는 구조가 큐와 똑같기 때문입니다. 순서가 완벽하게 보장되기 때문에 규칙에 맞게 공정하게 주문을 처리할 수 있을 것이라 생각합니다.

  3. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다.


    반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.

     import { LinkedList } from "./LinkedList.mjs";
    
    class Stack {
        constructor() {
            this.list = new LinkedList();
        }
    
        push(data) {
            this.list.insertLast(data);
        }
    
        pop() {
            return this.list.deleteLast();
        }
    
        peek() {
            try {
                return this.list.getNodeAt(this.list.count - 1);
            } catch (error) {
                return null;
            }
        }
    
        isEmpty() {
            return this.list.count == 0;
        }
    }
    
    export { Stack };
  4. 해시테이블의 성능은 해시 함수에 따라 달라집니다.


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

hashFunction(name){
          // 이름의 모든 글자의 유니코드를 더해서 7로 나누기
        let sum = 0;
        for (let index = 0; index < name.length; index++) {
            sum += name.charCodeAt(i);
            
        }
        return sum % 7;
}

댓글을 작성해보세요.


채널톡 아이콘