[TIL] 정글 9주차 키워드 정리
·
TIL
1. User Mode and Kernel Mode일단 커널부터커널은 운영체제의 핵심이다.리소스를 효율적으로 관리하기 위해 굉장히 다양한 일들을 수행한다.예를 들면 CPU 스케쥴링, 메모리 관리, 입출력 관리, 파일 시스템  등 왜 모드를 나눠서 관리하는가?커널에서 중요한 자원들을 관리하기 때문에 프로그래머가 그 중요한 자원에 함부로 접근하지 못하도록 모드를 2가지로 나눴다.  User Mode 프로그래머는 유저 모드에서 코드를 작성하고, 프로세스를 실행하는 등의 행동을 할 수 있다. Kernel Mode모든 자원에 접근해 명령을 내릴 수 있다. 유저 모드와는 비교가 안되게 컴퓨터 내부에서 모든 짓을 할 수 있다.프로세스를 생성하거나 메모리 할당, 해제 같은 일들을 할 수 있다.대표적으로 malloc()..
컴퓨터 구조와 운영체제 50분 만에 핵심 개념 정복하기
·
TIL
이 Youtube 영상을 보고 요약 정리했습니다. 1. 컴퓨터 구조를 알아야 하는 이유 개발자는 코드만 잘 짜면 되는거 아닌가? NO. 프로그래밍 언어 뿐 아니라 컴퓨터의 근간(컴퓨터의 구조, 운영체제)을 알아야 한다. ① 문제 해결 능력을 키울 수 있다. 똑같이 입력(같은 코드)했는데 실행이 안되요!컴퓨터를 미지의 대상이 아니라 분석의 대상으로 바라볼 수 있다.문법에 맞는 소스 코드를 컴퓨터에 입력만 하는 개발자 vs 컴퓨터를 관조하면서 문제를 해결할 수 있는 개발자  ② 성능, 용량, 비용을 고려한 프로그래밍이 가능해진다.사실 개발에서 가장 중요한 이야기 중 하나 컴퓨터를 고를 때 (무조건 저렴한 컴퓨터? 무조건 최신 컴퓨터? 단순한 접근은 안됨) 2. 컴퓨터 구조의 큰 그림컴퓨터가 이해하는 정보데이..
[TIL] LCS 알고리즘
·
TIL
LCS 알고리즘최장 공통 부분문자열 (Longest Common Substring):이는 두 개 이상의 문자열에서 연속적으로 나타나는 가장 긴 공통 부분 문자열을 찾는 문제다. 점화식 if i == 0 or j == 0: # 마진 설정 LCS[i][j] = 0elif string_A[i] == string_B[j]: LCS[i][j] = LCS[i - 1][j - 1] + 1else: LCS[i][j] = 0 최장 공통 부분수열 (Longest Common Subsequence):두 개 이상의 수열에서 공통으로 나타나는 가장 긴 부분수열을 찾는 문제다. 점화식 if i == 0 or j == 0: # 마진 설정 LCS[i][j] = 0elif string_A[i] == string_B[j]: LCS[..
[TIL] 그리디 알고리즘(탐욕법, Greedy Algorithm)
·
TIL
그리디 알고리즘(탐욕법, Greedy Algorithm)각 단계에서 가장 좋아 보이는 선택을 하는 방식이다. 현재 상황에서 최선을 선택을 한다. 한 번 선택한 것은 되돌리지 않는다. 빠르고 간단하지만, 항상 최적의 해를 보장하지는 않는다.  예제 (거스름돈 문제) def 거스름돈(금액): 동전 = [500, 100, 50, 10] # 사용 가능한 동전의 종류 결과 = {} for 단위 in 동전: 개수 = 금액 // 단위 if 개수 > 0: 결과[단위] = 개수 금액 %= 단위 return 결과print(거스름돈(1260))가장 큰 단위의 동전부터 시작한다. 현재 금액에서 해당 동전을 최대한 많이 사용한다. 남은 금액..
[TIL] 다이나믹 프로그래밍(Dynamic Programming, DP)
·
TIL
핵심 개념복잡한 문제를 더 작고 간단한 하위 문제들로 나누어 해결하는 것 (=기억하며 풀기) 문제를 더 작은 하위 문제로 나눈다. 각 하위 문제의 해답을 계산하고 저장한다. 저장된 결과를 이용해 더 큰 문제의 해답을 구한다. 특정한 알고리즘이 아니다. 그저 하나의 문제 해결 패러다임이다.  주요 특징같은 하위 문제의 결과를 여러 번 계산하지 않고 저장된 결과를 재사용한다. 큰 문제의 최적해가 작은 문제들의 최적해로 구성된다.  접근 방식 하향식(Top-down) : 메모이제이션 큰 문제에서 시작하여 작은 문제로 나누어 해결한다.재귀를 사용하지만, 계산된 결과를 저장(메모이제이션)하여 중복 계산을 방지한다.상향식(Bottom-up) : 타뷸레이션 가장 작은 부분 문제부터 시작하여 큰 문제를 해결한다. 반복..
최소 신장 트리(Minimum Spanning Tree, MST) : 가장 경제적인 방식으로 모든 지점을 연결한다
·
TIL
스패닝 트리(Spanning Tree)원래 그래프의 모든 정점을 포함하면서 사이클 없이 연결된 부분 그래프를 의미한다.  스패닝 트리 조건모든 정점을 포함한다. 스패닝 트리는 원래 그래프의 모든 정점을 반드시 포함한다. 스패닝 트리는 그래프의 모든 요소를 '포괄(span)'한다는 의미에서 그 이름이 유래했다. 정확히 (n-1)개의 간선을 가집니다. (여기서 n은 그래프의 정점 수) n개의 정점을 가진 그래프의 스패닝 트리는 정확히 (n-1)개의 간선을 가진다. 이는 모든 정점을 연결하는 데 필요한 최소한의 간선 수 이다. 사이클(순환)을 포함하지 않는다. 스패닝 트리에는 사이클이 존재하지 않는다. 즉, 어떤 정점에서 출발하여 다시 그 정점으로 돌아오는 경로가 없다.연결되어 있다. (모든 정점 간에 경로가..
다익스트라(Dijkstra) : 최단 경로를 찾아서
·
TIL
0. 개요1956년 네덜란드의 컴퓨터 과학자 에츠허르 다익스트라(Edsger W. Dijkstra)에 의해 고안된 이 알고리즘은, 그래프에서 한 정점(노드)에서 다른 모든 정점까지의 최단 경로를 효율적으로 찾는 방법을 제시한다.  핵심 아이디어다익스트라 알고리즘의 핵심 아이디어는 단순하면서도 강력하다. 출발점에서 시작하여, 현재까지 알려진 최단 경로를 가진 정점을 선택하고, 그 정점을 통해 갈 수 있는 다른 정점들의 최단 경로를 갱신해나가는 과정을 반복한다. 이 과정을 통해 알고리즘은 그래프의 모든 정점을 방문하게 되며, 각 정점까지의 최단 경로를 모두 찾아낸다. 특징다익스트라는 '탐욕적'(greedy) 접근 방식을 취한다. 이 말이 무슨 말이나면, 매 단계에서 가장 좋아 보이는 선택(여기서는 최단 거리..
위상 정렬(Topological Sort)
·
TIL
위상 정렬(Topological Sorting)위상 정렬은 복잡한 작업들 사이의 순서를 정리하는 강력한 도구다. 이 알고리즘은 방향성 비순환 그래프(DAG, Directed Acyclic Graph)에서 작동한다. 여기서 '방향성'이란 작업들 사이에 명확한 선후관계가 있다는 뜻이고, '비순환'이란 어떤 작업도 자기 자신으로 돌아오는 순환고리에 갇히지 않는다는 의미이다. 위상 정렬의 목표는 이러한 그래프의 모든 노드(작업들)를 일렬로 늘어세우는 것이다. 이때 중요한 점은 그래프의 방향, 즉 작업들 간의 선후관계를 어기지 않아야 한다는 것이다.  마치 도미노를 세우듯이, 각 작업은 자신에게 필요한 모든 선행 작업들이 완료된 후에야 수행될 수 있다. 이 알고리즘의 핵심은 '선행 관계'를 철저히 지키는 데 있다..