인프런 워밍업 클럽 3기 CS - 1주차 자료구조와 알고리즘 미션
7개월 전
1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다. 이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요? 이유를 함께 적어주세요.
학생의 출석번호를 통해 관리를 하고 학생 정보를 저장할 수 있는 해시테이블을 사용할 것입니다. 학생의 정보는 수시로 바뀔 수 있다고 생각합니다. 전학생이 올 수도 있고 기존 학생이 전학을 갈 수 도 있다고 생각합니다. 배열의 경우 읽기 효율이 좋지만 삽입, 삭제 효율이 좋지 않습니다. 연결리스트의 경우 읽기 효율이 떨어져 요구사항에 부합하지 않습니다. 그에 따라 읽기, 삽입, 삭제의 효율이 좋은 해시 테이블을 사용할 것입니다.
2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.
들어온 순서대로 처리해야한다는 요구사항이 있어서 해당 주문 프로그램은 큐 자료구조를 선택할것입니다.
3. 우리가 구현한 스택은 0번 인덱스, 즉 입구쪽으로 데이터가 삽입되고 나오는 구조입니다. 반대로 마지막 인덱스, 즉 출구쪽으로 데이터가 삽입되고 나오는 구조로 코드를 변경해주세요.
export class MyStack2 {
constructor() {
this.list = new DoublyLinkedList();
}
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.getNode(this.list.count - 1);
}
isEmpty() {
return this.list.count === 0;
}
}4. 해시테이블의 성능은 해시 함수에 따라 달라집니다. 수업 시간에 등번호를 이용해 간단한 해시 함수를 만들어봤습니다. 이번엔 등번호가 아닌 이름을 이용해 데이터를 골고루 분산시키는 코드로 수정해주세요.
힌트: charCodeAt() 함수를 이용 예시: name1 = "이운재"; name1.charCodeAt(0); // 51060 이운재의 0번 인덱스 ‘이’의 유니코드 출력
newHash(name) {
return name.charCodeAt(0) % 10;
}
댓글을 작성해보세요.