All'alba vincerò

At dawn, I will win!

전체보기 366

컴파일과 프로세스

프로그래밍 언어프로그래밍 언어는 코드를 어떻게 실행하느냐에 따라 컴파일 언어와 인터프리터 언어로 나뉨 컴파일 언어: 개발자가 코드를 작성하고 컴파일 과정을 거쳐 0과 1로 된 기계어로 실행 파일을 만듦컴파일 과정에서 코드의 문법 검사를 시행하고, CPU에서 처리 가능한 기계어로 실행 파일을 만들어놓기 때문에 실행 속도가 빠름대표적인 컴파일 언어: C, C++, Go 등 인터프리터 언어: 개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행 시 코드를 한 줄씩 해석해서 실행하는 언어미리 컴파일하지 않기 때문에 실행 도중에 오류가 발생할 수 있고, 실행 속도도 컴파일 언어에 비해 느림대표적인 인터프리터 언어: Python, JavaScript 등 컴파일 과정개발자가 작성한 코드가 실행 파일로 만..

CS/운영체제 2025.05.25

교착 상태(deadlock) 해결

교착 상태 회피 (Deadlock Avoidance): 프로세스에게 자원을 할당할 때, 자원을 어느 수준까지 할당하면 교착 상태가 발생하는지 파악해서 그 수준을 넘지 않도록 조절해서 할당함 교착 상태 회피는 전체 자원의 수와 현재 할당된 자원의 수를 기준으로 시스템의 상태를 두 가지로 나눔안전 상태(Safe State): 모든 프로세스가 정상적으로 종료될 수 있는 상태불안전 상태(Unsafe State): 당장은 문제가 없지만, 교착 상태로 이어질 가능성이 있는 상태불안전 상태라고 해서 무조건 교착 상태에 빠지는 건 아니지만 위험성이 커지므로 피하는 게 좋음 교착 상태 검출 방법1. 가벼운 검출: 타이머 사용프로세스가 일정 시간동안 작업을 진행하지 않으면 교착 상태가 발생했다고 간주하고 교착 상태를 ..

CS/운영체제 2025.05.25

정렬 알고리즘: 삽입 정렬(Insertion Sort)

삽입 정렬 (Insertion Sort): 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 하나씩 꺼내면서 알맞은 자리에 삽입해 나가는 방식 선택 정렬과 마찬가지로 정렬된 영역과 정렬되지 않은 영역으로 나눠서 계산함정렬되지 않은 영역에서 데이터를 꺼내서 정렬된 영역 내 적절한 위치에 삽입해서 정렬함 선택 정렬의 성능시간 복잡도: O(n²)성능이 좋지 않음 선택 정렬의 장단점장점이해와 구현이 간단함 단점성능이 O(n²)으로 별로 좋지 않음 삽입 정렬 흐름[ 4, 1, 5, 3, 6, 2 ]정렬된 영역: 4, 정렬되지 않은 영역: 1, 5, 3, 6, 2정렬되지 않은 영역의 첫 번째 원소인 1을 정렬된 영역의 마지막 데이터인 4와 비교함4는 1보다 크기 때문에 4를 오른쪽 인덱스에 덮어씀([..

CS/알고리즘 2025.05.23

정렬 알고리즘: 선택 정렬(Selection Sort)

선택 정렬 (Selection Sort): 정렬되지 않은 영역에서 가장 작은 값을 찾아서 맨 앞과 바꾸는 방식정렬된 영역과 정렬되지 않은 영역으로 나눠서 계산함배열의 정렬되지 않은 영역의 첫 번째 원소부터 마지막 원소까지 비교한 후 가장 작은 값을 첫 번째 원소와 교체함 바깥 반복문이 돌수록 정렬된 영역이 늘어나고, 안쪽 반복문의 횟수는 줄어드는 형태 선택 정렬의 성능 시간 복잡도: O(n²) 성능이 좋지 않음 선택 정렬의 장단점 장점 이해와 구현이 간단함 단점 성능이 O(n²)으로 별로 좋지 않음 예시: 숫자가 무작위로 들어있는 배열 정렬하기([4, 2, 3, 1]) 배열의 원소가 n개라면 n-1번 반복시켜줘야 함 최솟값을 가진 인덱스를 저장할 변수를 만들어줌 바깥 반복문에서 배열의 시작..

CS/알고리즘 2025.05.23

정렬 알고리즘: 버블 정렬(Bubble Sort)

버블 정렬 (Bubble Sort): 데이터를 옆 데이터와 비교하고, 자리를 바꾸어가며 정렬하는 방식버블 정렬은 배열의 무작위로 섞인 숫자를 정렬하는 방법 중 하나구현이 쉽지만 성능은 좋지 않음앞 숫자와 그 뒷 숫자를 비교해서 자리를 바꾸며 정렬을 수행한 번 반복이 끝날 때마다 제일 큰 숫자가 제일 오른쪽에 정착함 버블 정렬의 성능시간 복잡도: O(n²)성능이 좋지 않음→ 요소가 많아질수록 느려짐 버블 정렬의 장단점장점이해와 구현이 매우 간단함 단점성능이 O(n²)으로 별로 좋지 않음실무에서는 거의 사용되지 않음 예시: 숫자가 무작위로 들어있는 배열 정렬하기([4, 2, 3, 1])배열의 원소가 4개라면, 자리 교체는 최대 3번 일어나기 때문에 → 배열의 길이보다 1 작은 횟수만큼 반복 필요첫..

CS/알고리즘 2025.05.23

재귀, 콜스택

재귀 (Recursion): 어떤 것을 정의할 때, 자기 자신을 참조하는 것재귀함수: 자기 자신을 호출하는 함수재귀함수는 메모리 공간을 많이 차지함재귀함수의 필요성: 팩토리얼function myFunction(number) { consloe.log(number); myFunction(number + 1);}myFunction(1); // 무한 호출 → 메모리 초과 발생하여 자동 종료 재귀함수의 필수 조건기저 조건( = 탈출 조건, Base Case)이 반드시 있어야 함기저 조건이 없으면 무한 루프가 발생하고 메모리 초과가 일어남function myFunction(number) { if(number > 10) return; consloe.log(number); myFunction(nu..

CS/알고리즘 2025.05.23

자료구조: 덱, 해시 테이블, 셋

덱 (Deque, Double-Ended Queue): 양쪽(앞과 뒤)에서 데이터를 넣고 뺄 수 있는 자료구조데이터의 삽입과 제거를 head와 tail 두 군데서 자유롭게 할 수 있는 자료구조스택(Stack) + 큐(Queue)스택: head에서 데이터 삽입, 제거큐: head에서 데이터 삽입, tail에서 제거덱을 이용하면 스택과 큐를 전부 구현할 수 있음 덱의 추상 자료형printAll()리스트의 모든 요소 출력addFirst()리스트의 head에 데이터 삽입removeFirst()리스트의 head에서 데이터 제거addLast()리스트의 tail에 데이터 삽입removeLast()리스트의 tail에서 데이터 제거isEmpty()리스트가 비었는지 확인 해시 테이블 (Hash Table): 키(K..

CS/자료구조 2025.05.22

자료구조: 스택(Stack), 큐(Queue)

스택(Stack): 먼저 들어온 데이터가 나중에 나오는 데이터 구조FILO (First In Last Out)ex) 엘리베이터에서 가장 늦게 탄 사람이 먼저 내리게 되는 상황스택은 FILO 구조만 충족하면 어떤 자료구조로 구현하든 상관없음배열, 연결 리스트 등 다양한 자료구조로 구현 가능스택이 어울리는 상황그림판에서 Ctrl + Z로 되돌리기VS Code의 코드 문법 검사기코드에서 여는 괄호들을 순서대로 스택에 넣어두고, 닫는 괄호가 나올 때마다 스택에서 꺼내어 짝이 맞는지 검사연결 리스트로 스택을 구현할 때, 데이터를 삽입/삭제할 때 첫 번째 인덱스(head)에서 처리하면 간단하게 구현 가능삽입 (1 → 2 → 3 → 4 순으로 스택에 넣을 경우): 1 → 2, 1 → 3, 2, 1 → 4, 3, 2,..

CS/자료구조 2025.05.19

교착 상태(deadlock, 데드락)

교착 상태(deadlock, 데드락): 여러 프로세스가 서로 다른 프로세스의 작업이 끝나기를 기다리다가 아무도 작업을 진행하지 못하는 상태 여러 프로세스가 서로 자원이 풀리길 기다리다가 아무 일도 진행되지 못하는 상태 ex) 퇴근길 교차로에서 차량들이 꼬리에 꼬리를 물고 정지해 아무도 움직일 수 없는 상황→ 도로(공유 자원)가 모두 점유되어 발생한 교착 상태교착 상태가 발생하는 이유 ⇒ 공유 자원어떤 자원을 여러 개의 프로세스가 공유하지 않으면 교착 상태가 발생하지 않음 X 교착 상태 예시식사하는 철학자 문제 (Dining Philosophers Problem)철학자 5명이 원형 식탁에 앉아 있고, 철학자 사이에는 포크가 하나씩 있음 (총 5개)철학자가 밥을 먹으려면 왼쪽과 오른쪽 포크 두 개가 필요..

CS/운영체제 2025.05.15

세마포어(Semaphore)

세마포어(Semaphore): 여러 프로세스나 쓰레드가 공유 자원에 안전하게 접근할 수 있도록 제어하는 동기화 도구상호 배제 메커니즘을 위한 도구 중 하나상호 배제 메커니즘: 하나의 공유 자원에 동시에 여러 프로세스나 스레드가 접근하지 못하게 막는 방법내부적으로는 정수값 변수로 구현됨여러 프로세스가 동시에 공유 자원에 접근하지 못하게 하여 동기화 문제를 예방함세마포어는 여러 개의 열쇠를 가질 수 있는 구조이기 때문에, 특정 수 만큼의 동시 접근도 제어 가능 세마포어의 기본 연산wait(s): 세마포어 s 값을 1 감소시킴→ 값이 0보다 작아지면 해당 프로세스는 대기 상태로 전환됨signal(s): 세마포어 s 값을 1 증가시킴→ 대기 중인 다른 프로세스가 있으면 그 중 하나를 깨움 세마포어의 단점w..

CS/운영체제 2025.05.15