[Graphics] DirectX 11 기초
·
게임개발/Graphics
렌더링 파이프라인 : 3차원 상의 물체를 2차원의 컴퓨터 화면에 실제적으로 표현하기 위한 과정가장 중요한 5단계와 역할1. Input Assembler : 모델에 대한 기하학적 정보를 넘겨줌2. Vertex Shader : 정점단위로 연산, 각 정점이 어디에 위치해야하는지 연산3. Rasterizer Stage : 정점으로 이루어진 삼각형 내부를 보간하는 작4. Pixel Shader Stage : 조명에 따라 모델의 색이 달라지게 함5. Output Merger Stage : 모델을 화면에 출력 🧩 DX11의 주요 구성 요소DeviceGPU와 통신을 가능하게 해주는 인터페이스Swap Chain화면 출력(버퍼 교체) 담당Vertex Buffer정점 정보 (위치, 색상 등) 담는 곳Index Buffer..
[백준 / BOJ] 2631 줄세우기 C++
·
알고리즘/DP
문제 설명DP 문제입니다. KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기 위해 목적지까지 번호순서대로 일렬로 서서 걸어가도록 하였다. 이동 도중에 보니 아이들의 번호순서가 바뀌었다. 그래서 선생님은 다시 번호 순서대로 줄을 세우기 위해서 아이들의 위치를 옮기려고 한다. 그리고 아이들이 혼란스러워하지 않도록 하기 위해 위치를 옮기는 아이들의 수를 최소로 하려고 한다.예를 들어, 7명의 아이들이 다음과 같은 순서대로 줄을 서 있다고 하자.3 7 5 2 6 1 4아이들을 순서대로 줄을 세우기 위해, 먼저 4번 아이를 7번 아이의 뒤로 옮겨보자. 그러면 다음과 같은 순서..
[백준 / BOJ] 2096 내려가기 C++
·
알고리즘/DP
문제 설명DP 문제입니다. N줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자표가 주어져 있을 때, 얻을 수 있는 최대 점수, 최소 점수를..
[백준/BOJ] 2011 암호코드 C++
·
알고리즘/DP
문제 설명DP 문제입니다. 상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다.상근: 그냥 간단히 암호화 하자. A를 1이라고 하고, B는 2로, 그리고 Z는 26으로 하는거야.선영: 그럼 안돼. 만약, "BEAN"을 암호화하면 25114가 나오는데, 이걸 다시 글자로 바꾸는 방법은 여러 가지가 있어.상근: 그렇네. 25114를 다시 영어로 바꾸면, "BEAAD", "YAAD", "YAN", "YKD", "BEKD", "BEAN" 총 6가지가 나오는데, BEAN이 맞는 단어라는건 쉽게 알수 있잖아?선영: 예가 적절하지 않았네 ㅠㅠ 만약 내가 500자리 글자를 암호화 했다고 해봐. 그 때는 나올 수 있는 해석이 정말 ..
[백준/BOJ] 1965 상자넣기 C++
·
알고리즘/DP
문제 설명DP 문제입니다. 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 있다. 예를 들어 앞에서부터 순서대로 크기가 (1, 5, 2, 3, 7)인 5개의 상자가 있다면, 크기 1인 상자를 크기 5인 상자에 넣고, 다시 이 상자를 크기 7인 상자 안에 넣을 수 있다. 하지만 이렇게 상자를 넣을 수 있는 방법은 여러 가지가 있을 수 있다. 앞의 예에서 차례대로 크기가 1, 2, 3, 7인 상자를 선택하면 총 4개의 상자가 한 개의 상자에 들어가게 된다.상자의 크기가 주어질 때, 한 번에 넣을 수 있는 최대의 상자 개수를 출력하는 프로그램을 작성하시오.제한 사항풀이  ..
SpinLock
·
서버/공부
SpinLock멀티스레드 환경에서 동기화를 관리하기 위해 사용되는 락(잠금) 메커니즘공유 자원에 접근하려는 여러 스레드 중 하나만 접근하도록 보장하지만, 대기 중인 스레드가 CPU를 사용하면서 반복적으로 락 상태를 확인하는 방식 user level에서 발생하는 동기화방법 [동작 방식]1. 락이 풀려있다면 락을 획득하고, 자원을 사용. 락이 걸려 있다면, 다른 스레드가 락을 풀 때까지 계속 반복해서 락 상태 확인2. 스핀(반복), 락이 풀릴 때까지 기다리면서 반복적으로 상태를 확인하기 때문에 spinlock.3. 자원을 사용한 스레드는 락을 해제하여 다른 슬드가 자원에 접근할 수 있도록 함 [장점]: 시스템 호출을 통해 커널 모드로 전환하는  [[#Mutex Lock]]  에 비해 오버헤드가 적음  락이 ..
[백준 / BOJ] 9465 스티커 C++
·
알고리즘/DP
문제 설명DP 문제입니다. 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다.상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다.  모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점수를 매기고, 점수의 합이 최대가 되게 스티커를 떼어내려고 한다. 먼저, 그림 (b)와 같이 각 스티커에 점수를 매겼다. 상냥이가 뗄 수 있는 스티커의 점수의 최댓값을 구하는 프로그램을 작성하시오. 즉, 2n개의 스티커 중에서 점수의..
[백준 / BOJ] 12852 1로 만들기 2 C++
·
알고리즘/DP
문제 설명DP 문제입니다. 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.제한 사항풀이  전체 코드#include #include using namespace std;const int MAX = 1000001;int N;int DP[MAX];int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N; DP[1] = 0; for (int i = 2; i 횟수만 구하는 문제였으면 위와같이 작..
[백준 / BOJ] 11055 가장 큰 증가하는 부분 수열 C++
·
알고리즘/DP
문제 설명DP 문제입니다. 수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다.제한 사항풀이 DP[i] = max(DP[i], DP[1...i-1] + Arr[i]);전체 코드#include #include using namespace std;const int MAX = 1001;int N;int DP[MAX];int Arr[MAX];int main() { ios::sync_with_stdio(false); ci..
[백준 / BOJ] 11726 2xn 타일링 C++
·
알고리즘/DP
문제 설명DP 문제입니다. 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.제한 사항 풀이DP[i-1]에 2*1타일 붙이는 경우 + DP[i-2]에 2*2 타일 붙이는 경우따라서 DP[i] = DP[i-1] + DP[i-2]. 전체 코드#include using namespace std;const int MAX = 1001;int N;int DP[MAX];int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N; DP[1] = 1; DP[2] = 2; for(int i=3; i