[CS기초] 가상화(Virtualization)
·
크래프톤 정글/CS기초(키워드, 개념정리)
가상화(Virtualization)가상화(Virtualization)는 하나의 물리적인 시스템 자원을 마치 여러 개인 것처럼 나누어 사용하는 기술입니다. 즉, 컴퓨터 시스템의 리소스를 추상화하고 격리하여, 다양한 환경을 독립적으로 구성할 수 있게 해줍니다. 가상화를 쉽게 비유하면 '샵인샵(shop-in-shop)'이라고 할 수 있는데요. 대형 마트(물리 서버) 안에 여러 브랜드 매장(가상 머신)이 독립적으로 입점해 운영되듯, 하나의 서버 안에 여러 가상 환경이 서로 간섭 없이 운영될 수 있게 해주는 것이죠.  가상화를 사용하는 이유자원 활용도 향상: 서버 한 대로 여러 서비스를 운영운영 환경 격리: 테스트/배포 환경을 독립적으로 유지보안 및 장애 격리: 한 가상 환경의 문제가 다른 환경에 영향을 주지 않..
[중간정리] 4주차 - 스택과 레지스터, LCS, 그리디와 DP, 피보나치, 방향 그래프의 이행적 폐쇄
·
크래프톤 정글/CS기초(키워드, 개념정리)
스택과 레지스터스택(Stack)정의프로시저 호출 시 지역 변수와 매개 변수를 저장하기 위한 메모리 공간. 선언되는 순서와 반대로 메모리가 해제되는 LIFO(Last In First Out) 구조를 가지고 있다.용도함수의 로컬 변수 저장: 각 함수 호출 시 그 함수의 지역 변수들을 저장함수의 제어 흐름 관리: 함수가 다른 함수를 호출할 때, 반환 주소와 이전 함수의 스택 프레임 정보를 저장장점동적으로 메모리를 할당/해제할 수 있다.구현이 간단하며, 메모리 관리 오버헤드가 낮다.레지스터(Register)정의프로세서 내부에서 데이터를 저장하는 초고속 저장장치. 프로시저 실행 중 자주 접근하는 변수나 중간 계산값을 저장하기 위해 사용된다.용도중간 연산 결과의 저장: 연산 중 생성되는 중간 값을 빠르게 저장하고 ..
[CS기초] 4주차 개념 정리
·
크래프톤 정글/CS기초(키워드, 개념정리)
CSAPP[CSAPP 3장 완전정복] 시리즈 참고 (링크: 3.1절 핵심 정리)https://just-live.tistory.com/entry/CSAPP-3%EC%9E%A5-%EC%99%84%EC%A0%84-%EC%A0%95%EB%B3%B5-31-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EC%96%B8%EC%96%B4%EC%99%80-%EC%B9%9C%ED%95%B4%EC%A7%80%EB%8A%94-%EC%B2%AB-%EA%B1%B8%EC%9D%8C [CSAPP 3장 완전 정복] 3.1 어셈블리 언어와 친해지는 첫 걸음어셈블리 언어와 친해지는 첫 걸음우리는 이미 자바, 파이썬 등 편리하고 생산적인 고급 언어를 사용해 프로그램을 개발하고 있습니다. 그렇다면, 도대체 저 먼 옛날에..
[CS기초] 그리디 알고리즘(Greedy Algorithm)
·
크래프톤 정글/CS기초(키워드, 개념정리)
그리디 알고리즘(Greedy Algorithm)그리디 알고리즘은 현재 상황에서 가장 좋아 보이는 선택을 반복하여 최종 해를 구하는 알고리즘입니다.  그리디 알고리즘의 특징그리디 알고리즘이 정확한 최적해를 보장하기 위해서는 다음 두 조건을 만족해야 합니다.Greedy Choice Property (탐욕 선택 속성)전체 문제의 최적해는 부분 문제의 최적해로 구성되어야 한다.즉, 지금 당장의 최선의 선택이 결국 전체에서도 최선의 선택이어야 한다.예) 활동 선택 문제 (Activity Selection)Optimal Substructure (최적 부분 구조)문제의 최적해가 그 하위 문제들의 최적해로 구성될 수 있어야 한다.즉, 문제를 작은 부분으로 나누었을 때, 이들 각각의 최적해를 합치면 전체 문제의 최적해가..
[CS기초] Knapsack Problem(배낭 문제)
·
크래프톤 정글/CS기초(키워드, 개념정리)
Knapsack Problem(배낭 문제)Knapsack Problem은 제한된 무게를 가진 배낭에 물건들을 넣을 때, 가치를 최대로 하기 위해 어떤 물건들을 선택해야 하는지에 대한 조합을 찾는 최적화 문제입니다. 이 문제에서는 각 물건마다 무게(weight)와 가치(value)를 지니고 있는데, 배낭이 버틸 수 있는 최대 무게(W)를 초과하지 않으면서 선택한 물건들의 가치 총합이 최대가 되어야 합니다.  Knapsack Problem의 유형0/1 Knapsack Problem각 물건을 한 번씩만 선택할 수 있다.선택하거나 하지 않거나(0또는 1)의 선택지만 존재한다.Fractional Knapsack Problem한 물건을 일부만 쪼개서 담을 수 있다.그리디 알고리즘으로 해결이 가능하다Unbounded..
[CS기초] LCS(Longest common subsequence, 최장 공통 부분 수열)
·
크래프톤 정글/CS기초(키워드, 개념정리)
LCS(Longest common subsequence, 최장 공통 부분 수열)LCS는 두 수열이 주어졌을 때, 순서를 유지하면서 공통적으로 나타나는 가장 긴 부분 수열을 찾는 문제입니다. 보통 문자열 비교에서 많이 활용됩니다. 가장 큰 특징은 부분 수열이기 때문에 연속해서 등장할 필요가 없고, 중간에 다른 값이 있더라도 순서만 맞는다면 공통 수열로 인정된다는 점입니다.  LCS 길이 구하기LCS는 DP(동적 계획법)으로 해결할 수 있는 대표적인 문제인데요. 아래와 같은 점화식을 세워 해결합니다.점화식두 문자열 A[1..i], B[1..j]의 LCS 길이를 dp[i][j] 라고 하면,if A[i] == B[j]: dp[i][j] = dp[i-1][j-1] + 1else: dp[i][j] = m..
[CS기초] 다이나믹 프로그래밍(DP, Dynamic Programming)
·
크래프톤 정글/CS기초(키워드, 개념정리)
다이나믹 프로그래밍(Dynamic Programming, 동적 계획법)이란?다이나믹 프로그래밍은 여러 개의 하위 문제를 먼저 푼 후 그 결과를 쌓아올려 주어진 문제를 해결하는 알고리즘입니다. 중복되는 계산을 줄여 효율적으로 문제를 해결할 수 있는데요. 곧 하위 문제(subproblem)의 해(solution)를 별도의 저장 공간(DP 테이블)에 미리 기록하고, 이를 재사용함으로써 연산 속도를 획기적으로 향상시킵니다. 이러한 이유로 흔히 ‘똑똑한 재귀’라고도 부릅니다. DP가 빠른 이유는, 한번 계산한 값을 다시 반복적으로 계산하지 않고 미리 저장된 값을 불러오기 때문입니다. 즉, 이미 f(4)나 f(5)와 같이 계산한 결과가 있다면 다시 계산하지 않고 DP 테이블에서 바로 가져오는 것입니다. 특히 최대값..
[CS기초] 포인터(pointer), & 연산자와 * 연산자
·
크래프톤 정글/CS기초(키워드, 개념정리)
포인터(pointer), & 연산자와 * 연산자C 언어를 배우다 보면 빠지지 않고 등장하는 개념이 바로 포인터(pointer)인데요. 포인터는 처음엔 어렵게 느껴질 수 있지만, 메모리와 프로그램의 작동 방식을 더 깊이 이해하는 데 필수적인 개념이기도 합니다. 이번 포스팅에서는 포인터의 기초와 함께 & 연산자와 * 연산자의 역할, 배열과의 관계, 그리고 함수 호출 방식까지 차근차근 알아보겠습니다.  변수와 메모리 주소우리가 변수를 선언하면, 컴퓨터는 해당 변수의 값을 저장하기 위해 메모리 공간을 할당하고 그 위치(주소)에 이름을 붙입니다.int a = 10;printf("%p\n", &a); // 변수 a의 메모리 주소 출력위 예제에서 &a는 변수 a의 주소값을 의미하는데요. 주소는 %p 서식 지정자를 통..