![[인프런 워밍업 클럽 3기 CS] 자료구조와 알고리즘 1주 차 미션](https://cdn.inflearn.com/public/files/blogs/ff82a947-2bba-456b-8bbf-e41d8a9b2a51/IMG_3742.jpeg)
[인프런 워밍업 클럽 3기 CS] 자료구조와 알고리즘 1주 차 미션
자료구조와 알고리즘
1. 학생 정보를 저장할 자료구조 선택
• 해시맵(HashMap) 또는 딕셔너리(Dictionary)
• 이유: 학생 정보를 (학번 → 객체) 형태로 저장하고 빠르게 검색할 수 있음
• 예제:
let studentRecords = new Map();
studentRecords.set(2023001, { name: "홍길동", age: 20, grade: "A" });
console.log(studentRecords.get(2023001)); // { name: "홍길동", age: 20, grade: "A" }
• 검색 속도: O(1) (빠름)
➡ 학생 정보를 빠르게 조회할 필요가 있으므로 해시맵 사용
2. 주문 처리를 위한 자료구조 선택
• 큐(Queue)
• 이유: 주문은 선입선출(FIFO, First In First Out) 방식으로 처리됨
• 예제:
class OrderQueue {
constructor() {
this.orders = [];
}
enqueue(order) {
this.orders.push(order);
}
dequeue() {
return this.orders.shift();
}
}
let orderQueue = new OrderQueue();
orderQueue.enqueue("햄버거");
orderQueue.enqueue("콜라");
console.log(orderQueue.dequeue()); // 햄버거
• 삽입, 삭제 시간 복잡도: O(1)
➡ 주문은 들어온 순서대로 처리해야 하므로 큐(Queue) 사용이 적절
3. 스택을 마지막 인덱스로 삽입, 삭제하도록 변경
• 기존: 0번 인덱스에서 push()와 pop() 수행
• 변경: 배열의 마지막 인덱스에서 삽입(push())과 삭제(pop()) 수행
class Stack {
constructor() {
this.stack = [];
}
push(value) {
this.stack.push(value); // 마지막 인덱스에 삽입
}
pop() {
return this.stack.pop(); // 마지막 인덱스에서 제거
}
}
let stack = new Stack();
stack.push(1);
stack.push(2);
console.log(stack.pop()); // 2
➡ 시간 복잡도: push() 및 pop() 연산은 O(1)
4. 이름을 이용한 해시 함수 구현
이름을 유니코드 값(charCodeAt)으로 변환하여 해시 키를 생성합니다.
function hashFunction(name) {
let hash = 0;
for (let i = 0; i < name.length; i++) {
hash += name.charCodeAt(i);
}
return hash % 100; // 100개의 해시 버킷 사용
}
// 테스트
console.log(hashFunction("이운재"));
console.log(hashFunction("홍길동"));
➡ 유니코드 값을 사용하면 충돌 가능성이 낮아지고 해시 테이블의 분포가 개선됨
댓글을 작성해보세요.