CS 인프런 워밍업 클럽 1주차 발자국
자료구조와 알고리즘 학생 정보를 저장할 자료구조저는 해시 테이블(Hash Table)를 선택하겠습니다.해시 테이블을 선택하는 경우, 학생의 학번이나 ID를 키(key)로 설정하면 빠르게 검색할 수 있습니다.해시 테이블은 검색 속도가 빠르지만 충돌 관리가 필요하고, 트리는 균형을 유지해야 하는 단점이 있습니다.주문을 처리할 자료구조저는 큐(Queue) 를 선택하겠습니다.주문이 들어온 순서대로 처리되므로 FIFO(First-In, First-Out) 구조인 큐가 적절합니다.enqueue() 연산으로 주문을 받고, dequeue() 연산으로 처리하면 효율적입니다.JavaScript의 Array.push()와 Array.shift()를 활용해 간단하게 구현할 수 있습니다.스택 구조 변경 (마지막 인덱스로 삽입 및 제거)기존 코드가 unshift() 와 shift() 를 이용하여 0번 인덱스에서 데이터를 삽입/삭제했다면,이를 push() 와 pop() 으로 변경하여 마지막 인덱스에서 처리하도록 수정합니다.class Stack { constructor() { this.items = []; } push(element) { this.items.push(element); // 마지막 인덱스에 추가 } pop() { if (this.isEmpty()) { return "Stack is empty"; } return this.items.pop(); // 마지막 인덱스에서 제거 } peek() { return this.items[this.items.length - 1]; // 마지막 요소 반환 } isEmpty() { return this.items.length === 0; } size() { return this.items.length; } } 이름을 이용한 해시 함수이름의 각 문자의 유니코드 값을 합산하여 해시값을 생성합니다.function hashFunction(name) { let hash = 0; for (let i = 0; i charCodeAt()을 사용하여 각 문자(한글 포함)의 유니코드 값을 가져와 더합니다.이렇게 하면 이름이 유사하더라도 해시값이 골고루 분포되도록 도울 수 있습니다.100으로 나누어 나머지를 사용하면 배열 크기에 맞게 적절한 인덱스가 생성됩니다. 운영체제폴링 방식의 대안이벤트 기반(Event-Driven) 방식을 사용하면 성능을 최적화할 수 있습니다.checkSkillActivated()를 주기적으로 확인하는 대신, 인터럽트(Interrupt) 또는 이벤트 리스너를 활용하면 필요할 때만 실행됩니다.예를 들어, 이벤트 리스너를 등록하여 플레이어가 스킬을 사용하면 즉시 감지할 수 있습니다.document.addEventListener("skillUsed", function() { console.log("스킬이 사용되었습니다!"); }); function useSkill() { let event = new Event("skillUsed"); document.dispatchEvent(event); } useSkill(); // 스킬 사용 시 이벤트 발생 게임 엔진에서는 콜백 함수 또는 인터럽트를 활용하여 특정 이벤트 발생 시에만 처리하도록 설계하는 것이 일반적입니다.프로그램과 프로세스의 차이프로그램: 실행되지 않은 상태의 정적인 파일 (ex: .exe, .out 파일)프로세스: 실행 중인 프로그램 (CPU에서 작업을 수행하고 있는 개체)예를 들어, Chrome.exe 파일 자체는 프로그램, 실행 중인 크롬 브라우저는 프로세스입니다.멀티프로그래밍과 멀티프로세싱의 차이멀티프로그래밍:여러 개의 프로그램을 메모리에 올려두고 CPU가 하나씩 실행한 프로그램이 I/O 작업을 수행하는 동안, CPU는 다른 프로그램을 실행CPU 사용률을 높이지만 동시에 실행되는 것은 아님멀티프로세싱:여러 개의 CPU(Core)가 있어 여러 프로세스를 동시에 실행병렬 처리가 가능하여 성능 향상멀티코어 프로세서를 사용하는 현대 시스템에서 일반적으로 사용됨운영체제가 프로세스를 관리하는 방식프로세스 스케줄러(Process Scheduler):프로세스의 상태를 관리하고 실행 순서를 결정하는 역할PCB(Process Control Block):각 프로세스의 상태, 레지스터 값, 메모리 정보 등을 저장하는 자료구조스케줄링 알고리즘:FCFS(선착순), SJF(최단 작업 우선), RR(라운드 로빈) 등 다양한 방식으로 프로세스를 관리컨텍스트 스위칭(Context Switching)CPU가 실행 중인 프로세스를 변경할 때 발생하는 과정실행 중인 프로세스의 레지스터, 프로그램 카운터(PC), 스택 정보 등을 PCB에 저장새로운 프로세스를 실행하기 위해 PCB에서 정보를 불러와 다시 복원문맥 전환이 자주 발생하면 오버헤드(비용)가 증가하여 성능이 저하될 수 있음예시:프로세스 A 실행 중 → 인터럽트 발생 (I/O 요청)프로세스 A의 상태 저장 (PCB에 보관)프로세스 B 실행프로세스 A의 I/O 완료 → PCB에서 복원 후 실행 재개