분류 전체보기 268

[컴퓨터구조] 메모리

메모리 개요 보조기억장치는 전원을 꺼도 데이터를 보존하는 비휘발성 저장 장치로, 이곳에는 데이터나 프로그램을 영구적으로 저장한다. 그러나 CPU와 보조기억장치 간에는 큰 데이터 전송 속도 차이가 있고, 두 장치 사이에 운영 체제가 중재 역할을 하므로, CPU는 보조기억장치에 직접 접근할 수 없다. 이 문제를 해결하기 위해, 실행될 프로그램이나 데이터는 보조기억장치에서 먼저 주 메모리인 RAM으로 복사된다. RAM은 휘발성 메모리로, 전원이 꺼지면 그 내용이 사라지지만, CPU가 빠르게 접근하여 데이터를 읽고 쓸 수 있게 한다. 따라서 RAM의 용량은 시스템 성능에 큰 영향을 미친다. RAM의 용량이 클수록 보조기억장치에서 더 많은 데이터를 미리 로드하여 저장할 수 있게 되는데, 이는 여러 프로그램을 동시..

CS/컴퓨터구조 2023.06.22

[컴퓨터구조] 캐시 메모리

메모리 계층 구조와 캐시 메모리 저장 장치 계층 구조 메모리 계층 구조(Memory Hierarchy)는 시스템 성능 최적화를 위해 다양한 유형의 메모리 저장소를 계층적으로 구성하는 방식을 의미한다. 이 계층 구조는 데이터의 속도, 용량, 비용 등의 요소를 고려하여, CPU로부터 얼마나 가까운 위치에 있는지를 기준으로 구성된다. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 장치는 느리다 속도가 빠른 저장 장치는 저장 용량이 적고, 가격이 비싸다 계층 구조의 상위에 위치하는 메모리는 하위 계층의 메모리보다 빠르지만, 용량은 적고 가격이 비싸다. 반대로 하위 계층의 메모리는 상위 계층의 메모리보다 느리지만, 용량이 크고 가격이 싸다. 컴퓨터 시스템은 이러한 계층 구조 내의 모든 메모리를 활용하여 최적의 ..

CS/컴퓨터구조 2023.06.21

[프로그래머스] 소수 찾기 with C++

문제 설명 제한 사항 및 입출력 예제 개념 이 문제는 주어진 문자열에서 추출 가능한 모든 숫자 조합 중 소수가 몇 개 있는지를 찾는 문제다. 이 문제를 해결하기 위해서는 두 가지 주요 과정이 필요하다. 먼저 가능한 모든 숫자 조합을 생성해야 한다는 것이다. 이 과정에서 문자열의 순열을 찾는 개념을 사용한다. 즉, 주어진 문자열의 모든 문자를 사용하여 만들 수 있는 모든 숫자 조합을 배열에 담는다. 두 번째는 소수를 판별하는 것이다. 생성된 모든 숫자 조합을 순회하며 소수인지 판별한다. 문제를 해결하는 과정에서 주의해야 할 점은 동일한 숫자가 두 번 이상 카운트되면 안 된다는 점이다. 예를 들어 "11"은 "1"이 두 번 등장하므로 소수인 11이 두 번 카운트되어서는 안 된다. 이 문제는 중복을 허용하지 ..

[유니티] 한글 폰트 깨짐 with Text Mesh Pro

개요 유니티로 게임 개발을 진행하던 중, 한글 문자가 깨져서 사각형으로 나타나는 문제를 발견하였다. 이 현상은 주로 폰트가 한글을 지원하지 않거나, 파일의 인코딩이 잘못된 경우에 발생하는데, 이제부터 이 문제를 해결하는 방법에 대해 살펴보겠다. 폰트 다운 유니티에서 기본적으로 사용하는 LiberationSans 폰트는 기본적으로 한글을 지원하지 않는다. 특정 폰트가 한글을 지원하지 않을 때, 이를 직접 바꾸는 것은 불가능하다. 따라서 다른 한글을 지원하는 폰트를 찾아서 다운로드하여야 한다. 새로운 폰트는 에셋 스토어 혹은 구글링 등을 통해 다운로드하면 된다. 필자의 경우 넥슨의 메이플스토리 서체와 TextMesh Pro를 기준으로 진행하겠다. 해당 사이트의 TTF 파일을 다운로드하여 폰트 작업이 필요한 ..

Game/Unity 2023.06.18

[프로그래머스] 행렬의 곱셈 with C++

문제 설명 제한 사항 및 입출력 예제 개념 행렬의 곱셈을 구현하는 비교적 간단한 알고리즘이다. 행렬의 곱셈을 수행하려면 몇 가지 기본적인 규칙과 조건이 필요하다. 예를 들어, n1 * m1 행렬A, n2 * m2 행렬B가 존재할 때 두 행렬의 곱셈이 이루어지기 위해선 차원 일치: m1 = n2 결과 행렬의 크기: 행렬A * 행렬B = 행렬C일 때, 행렬 C의 크기는 n1 * m2 곱셈 규칙: C[i][j] = A[i][k] * B[k][j] 와 같은 조건들이 필요하다. 풀이 #include using namespace std; vector solution(vector ary1, vector ary2) { vector answer(ary1.size()); int sum = 0; for (int i = 0;..

[백준] 1197 최소 스패닝 트리 with C++

문제설명 입출력 예제 개념 최소 신장 트리 문제다. 주어진 그래프에서 가중치의 합이 최소가 되는 트리를 찾는 것이므로, MST 알고리즘 중 크루스칼 알고리즘을 이용해서 풀면 해결할 수 있다. 이때 Kruskal 알고리즘은 모든 간선들의 가중치를 오름차순으로 정렬하고, 가장 가중치가 작은 간선부터 연결해 나가면서 MST를 만들어 나가는 알고리즘이다. 풀이 #include #include #include using namespace std; int findParent(int parent[], int node) { while (parent[node] != node) node = parent[node]; return node; } void unionParent(int parent[], int a, int b) ..

Algorithm/백준 2023.06.17

[알고리즘] 다익스트라 최단 경로 알고리즘

다익스트라 알고리즘개요 그래프에서 단일 시작 최단 경로 문제는 시작 정점과 목적 정점이 주어졌을 때, 시작 정점에서 목적 정점까지 이어지는 최소 비용 경로를 찾는 문제다. 이 문제를 해결하는 여러 알고리즘 중 하나가 다익스트라 알고리즘(Dijkstra's algorithm)이다.  다익스트라 알고리즘은 음수 가중치를 갖지 않는 그래프에서 사용되는 최단 경로 탐색 알고리즘이다. 이 알고리즘은 프림의 최소 신장 트리(MST) 알고리즘을 변형한 것으로, 다음과 같은 절차를 따른다. 시작 노드를 설정시작 노드의 거리 값은 0으로, 이를 제외한 모든 노드의 거리 값은 무한대로 초기화모든 거리 값을 최소 힙에 추가최소 힙으로부터 꺼낸 정점 U와 인접한 모든 정점 V에 대해, 만약 V의 거리 값이 (U의 거리 값 +..

CS/알고리즘 2023.06.17

[백준] 9372 상근이의 여행 with C++

문제설명 입출력 예제 개념 이 문제는 모든 국가가 연결되어 있고, 모든 비행기 티켓 가격이 동일하다는 특성 때문에 최소 신장 트리 문제처럼 보일 수 있다. 하지만 여기서 중요한 점은 상근이가 한 국가에서 다른 국가로 이동할 때, 필요에 따라 다른 국가를 거쳐갈 수 있다는 것이다. 이는 실질적으로 모든 비행기를 직접 타고 갈 필요가 없다는 것을 의미한다. 따라서 이 문제의 답은 MST 알고리즘을 사용하지 않고도 간단히 구현할 수 있다. 상근이가 모든 국가를 여행하기 위해서는 전체 국가의 수 - 1 만큼의 비행기를 타면 된다. 왜냐하면 한 국가에서 출발해 모든 다른 국가를 방문하려면, 국가의 수보다 비행기를 하나 적게 타면 되기 때문이다. 풀이 #include using namespace std; int m..

Algorithm/백준 2023.06.16

[알고리즘] 프림 알고리즘

프림의 최소 신장 트리 알고리즘프림 알고리즘 프림 알고리즘(Prim's Algorithm)은 최소 신장 트리 문제를 해결하는 그리디 알고리즘 중 하나다. 그래프의 임의의 정점에서 시작하여, 그래프의 모든 정점을 포함하고 모든 간선의 가중치 합이 최소인 트리를 찾는 알고리즘으로서, BFS의 동작 방식과 유사하다. 동작 과정은 다음과 같다. 시작 노드를 선택하고, 선택한 정점을 트리에 추가선택한 노드에 인접하고 트리에 연결되지 않은 노드로 연결된 간선들 중, 가장 작은 가중치를 가진 간선을 추가그래프의 모든 노드가 트리에 추가될 때까지 반복예시  다음과 같은 그래프가 있다고 가정하고, 이러한 그래프에 프림 알고리즘을 적용하여 최소 신장 트리를 구하는 과정을 살펴보자.    먼저 시작 정점을 제외하고, 모든 ..

CS/알고리즘 2023.06.15

[알고리즘] 그래프 순회 문제

그래프 탐색개요 그래프 탐색(graph traversal problem), 또는 그래프 순회 문제(graph search problem)는 그래프의 일련의 정점을 체계적으로 방문하는 문제를 의미한다. 주어진 그래프 G = 에서 특정 정점 s를 시작점으로 하여, 모든 정점 v ∈ V를 한 번씩 방문하는 것이 이 문제의 목표다. 이 과정에서 방문된 정점의 순서는 탐색 알고리즘에 따라 달라진다. 탐색은 주로 그래프의 구조를 이해하거나, 특정 경로를 찾는 등의 목적으로 사용된다. 이를 통해 네트워크 연결 상태, 최단 경로, 사이클 등 그래프의 다양한 특성을 분석할 수 있다.  그래프 탐색은 다양한 응용 분야에서 중요한 역할을 수행한다. 예를 들어, 네트워크 라우팅, SNS에서 친구 추천, 웹 크롤러 등에서 그래..

CS/알고리즘 2023.06.14