블로그
전체 32025. 03. 09.
0
[1주차] 인프런 워밍업 클럽 스터디 3기 - CS전공지식, 운영체제 미션
1. 프로그램과 프로세스의 차이프로그램은 저장된 코드로, 실행되지 않는 정적인 상태다. 반면, 프로세스는 프로그램이 실행되어 메모리에 올라간 상태로, CPU와 메모리를 할당받아 동작한다. 즉, 프로그램이 실행되면 프로세스가 된다.2. 멀티프로그래밍과 멀티프로세싱의 차이멀티프로그래밍: 하나의 CPU가 여러 프로그램을 번갈아 가면서 실행하는 방식으로, CPU 사용률을 높이는 것이 목적이다. 멀티프로세싱: 여러 개의 CPU를 사용하여 여러 작업을 동시에 실행하는 방식으로, 성능을 향상시키는 것이 목적이다.3. 운영체제가 프로세스를 관리하는 방법운영체제는 프로세스를 효율적으로 관리하기 위해 프로세스 스케줄러를 사용한다. 이는 실행 가능한 프로세스를 스케줄링하여 CPU에 할당하는 역할을 한다.4. 컨텍스트 스위칭(Context Switching)컨텍스트 스위칭은 CPU가 실행 중인 프로세스를 변경할 때 현재 프로세스의 상태를 저장하고, 새로운 프로세스의 상태를 복원하는 과정이다. 이 과정에서 오버헤드가 발생할 수 있다.추가: 폴링 방식 대신 해결 방법현재 코드처럼 일정 주기로 상태를 체크하는 방식(폴링)은 비효율적이다. 이를 해결하기 위해 이벤트 기반 방식을 사용할 수 있다.이벤트 리스너 방식: 특정 이벤트가 발생하면 바로 실행되도록 설정한다.콜백 함수: 특정 조건이 만족될 때 자동으로 실행되는 함수 사용.스레드와 동기화: 별도의 스레드에서 신호를 감지하고 필요할 때만 실행.
알고리즘 · 자료구조
・
운영체제
2025. 03. 09.
0
[1주차] 인프런 워밍업 클럽 스터디 3기 - CS전공지식, 자료구조와 알고리즘 미션
1. 학생 정보 저장을 위한 자료구조 선택자료구조: 해시맵(Map)이유:학생의 정보를 학번 또는 이름을 키(key)로 저장하면 빠르게 조회할 수 있음.검색, 추가, 삭제가 O(1)에 가까운 시간복잡도를 가짐.배열(Array)도 가능하지만, 특정 학생을 찾기 위해 전체 배열을 탐색해야 할 수도 있어 비효율적임.2. 주문을 받는 프로그램을 위한 자료구조 선택자료구조: 큐(Queue)이유:주문이 들어온 순서대로 처리되어야 하므로 FIFO(First In First Out) 방식이 적절함.JavaScript에서는 Array.push()로 삽입, Array.shift()로 삭제하면 큐처럼 동작할 수 있음.효율적인 큐를 구현하려면 LinkedList를 사용할 수도 있음.3. 스택의 입구/출구 방향 변경기존 코드가 0번 인덱스를 입구로 사용하는 구조일 경우, 마지막 인덱스를 입구로 변경해야 함.class Stack { constructor() { this.stack = []; } push(value) { this.stack.push(value); } pop() { return this.stack.pop(); } peek() { return this.stack[this.stack.length - 1]; } isEmpty() { return this.stack.length === 0; } } //결과 const stack = new Stack(); stack.push(1); stack.push(2); console.log(stack.pop()); // 2 console.log(stack.pop()); // 1 4. 이름을 이용한 해시 함수 구현등번호 대신 이름의 유니코드 값을 합산하여 해시값을 생성하도록 수정.hashFunction(name) { let hash = 0; for (let i = 0; i
알고리즘 · 자료구조
・
알고리즘
・
자료구조
2025. 03. 09.
0
[1주차] 인프런 워밍업 클럽 스터디 3기 - CS전공지식 발자국
자료구조데이터를 저장하는 구조이며, 어떤 자료구조를 선택하느냐에 따라 데이터 처리 방식이 달라진다.변수: 가장 단순한 자료구조로, 저장된 데이터를 찾으려면 변수명을 사용.배열: 데이터를 연속된 메모리 공간에 저장하며, 인덱스를 통해 빠르게 접근 가능.유지보수 측면에서 데이터를 배열에 저장하는 것이 일반적으로 유리함.단, 데이터 삽입/삭제 시 오버헤드가 발생하여 성능 저하 가능.연결리스트: 노드(데이터 + 포인터)로 이루어져 있으며, 각 노드가 다음 노드를 가리키는 방식.첫 번째 노드만 알면 전체 리스트를 탐색 가능.데이터 삽입/삭제가 용이(기존 데이터 이동 없이 포인터만 변경).하지만 특정 위치에 접근하는 속도는 배열보다 느림.배열 vs 연결리스트배열: 빠른 검색(O(1)) & 고정된 크기의 연속된 메모리 할당연결리스트: 빠른 삽입/삭제(O(1)) & 동적 메모리 할당시간 복잡도 & 알고리즘 성능알고리즘은 코드 실행 성능을 결정하며, 반복문이 많아질수록 실행시간이 증가.성능을 평가하는 기준:메모리를 줄이는 알고리즘메모리를 많이 사용하지만 속도가 빠른 알고리즘시간 복잡도 (Big-O 표기법)입력 크기(n)에 따라 계산량이 어떻게 증가하는지를 나타냄.빅오(O): 최악의 경우빅세타(Θ): 평균적인 경우빅오메가(Ω): 최선의 경우일반적으로 빅오(O)를 많이 사용.빅오 표기법 예시O(1): 상수 시간 - 입력 크기와 상관없이 일정한 시간 소요 (예: 배열에서 인덱스로 접근)O(n): 선형 시간 - 입력 크기에 비례해 실행 시간 증가 (예: 배열을 순회)O(n²): 제곱 시간 - 중첩 반복문 (예: 버블 정렬)O(log n): 로그 시간 - 이진 탐색자료구조 선택배열: 빠른 조회(O(1)), 삽입/삭제가 비효율적(O(n))연결리스트: 삽입/삭제가 효율적(O(1)), 조회가 비효율적(O(n))메모리 구조가 중요한 경우 운영체제 공부가 필요.추상 자료형 (ADT, Abstract Data Type)자료구조에서 제공하는 기능을 정의한 것.예시:연결리스트의 모든 원소 출력모든 데이터 제거특정 인덱스에 데이터 삽입 정리: 적절한 자료구조를 선택하고, 알고리즘을 통해 데이터를 효과적으로 처리해야 한다. 성능 평가를 위해 Big-O를 사용하며, 특정 작업에 맞는 자료구조를 골라야 한다.
알고리즘 · 자료구조
・
알고리즘
・
자료구조
・
운영체제