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

[인프런 워밍업 클럽 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("홍길동"));

유니코드 값을 사용하면 충돌 가능성이 낮아지고 해시 테이블의 분포가 개선됨

댓글을 작성해보세요.

채널톡 아이콘