![[인프런 워밍업 클럽 스터디 3기] 1주차 미션 - 자료구조와 알고리즘](https://cdn.inflearn.com/public/files/blogs/7a587607-c6e0-4886-a829-1bc433e11ba6/336224.png)
[인프런 워밍업 클럽 스터디 3기] 1주차 미션 - 자료구조와 알고리즘
자료구조와 알고리즘
여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.
이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?
이유를 함께 적어주세요.Key 값으로 출석번호를 쓰고 Value로 이름을 저장하여, HashMap을 사용할 것 같습니다. 왜냐하면 본인의 출석번호는 대부분 알고 있기 때문에 출석번호를 알면 O(1)으로 학생의 이름을 찾을 수 있기 때문입니다. 또한 학생이 추가, 제거, 수정되었을 때도 직관적으로 출석번호를 알면 데이터를 수정할 수 있으므로 확장성에 용이하다고 생각합니다.
여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다.
주문은 들어온 순서대로 처리됩니다.
이 때 여러분이라면 어떤 자료구조를 선택하실 건가요?
이유를 함께 적어주세요.First In First Out의 Queue를 사용할 것 같습니다.
들어온 순서대로 처리되는 구조가 큐와 똑같기 때문입니다. 순서가 완벽하게 보장되기 때문에 규칙에 맞게 공정하게 주문을 처리할 수 있을 것이라 생각합니다.우리가 구현한 스택은 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 };
해시테이블의 성능은 해시 함수에 따라 달라집니다.
수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다.
이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.
hashFunction(name){
// 이름의 모든 글자의 유니코드를 더해서 7로 나누기
let sum = 0;
for (let index = 0; index < name.length; index++) {
sum += name.charCodeAt(i);
}
return sum % 7;
}
댓글을 작성해보세요.