분류 전체보기

두 점 사이의 거리 구하기
플레이어 사이의 거리 혹은 충돌하려는 두 물체 사이의 거리, 더 나아가서는 사정 거리 안에 들어왔는지 아닌지를 알고 싶을 때가 생기면 어떻게 해야 할까? 가장 간단한 방법은 피타고라스의 정리를 이용하는 것이다. A와 B를 잇는 선분을 하나 그린 후 이를 빗변으로 하는 직각 삼각형을 하나 그린다. A(x1, y1), B(x2, y2)라 할 때 나머지 하나의 꼭짓점의 좌표는 C(x2, y1)이 된다. 여기서 피타고라스의 정리를 사용하면 A와 B를 잇는 빗변의 거리를 구할 수 있다. 제곱근은 직접 연산을 통해 계산해도 되지만 헤더를 추가해 sqrt 와 pow를 이용해도 된다. sqrt(값) 제곱근을 구하는 함수로 제곱근을 반환 pow(값, 지수) 제곱을 구하는 함수. 3차원으로 확장 위의 거리의 공식은 xy축..
에라토스테네스의 체
소수를 판별하는 알고리즘이다. 소수들을 대량으로 빠르고 정확하게 구하는 방법이다. 단일 숫자 소수 여부 확인 어떤 수의 소수의 여부를 확인 할 때는, 특정한 숫자의 제곱근 까지만 약수의 여부를 검증하면 O(N^1/2)의 시간 복잡도로 빠르게 구할 수 있다. 수가 수(N이라고 가정)를 나누면 몫이 생기는데, 몫과 나누는 수 둘 중 하나는 N 제곱근 이하이기 때문이다. 만약, 대량의 소수를 한꺼번에 판별해야할 경우는 '에라토스테네스의 체'를 이용한다. 에라토스테네스의 체 원리 에라토스테네스의 체는 가장 먼저 소수를 판별할 범위만큼 배열을 할당하여, 해당하는 값을 넣어주고, 이후에 하나씩 지워나가는 방법을 이용한다. 배열을 생성하여 초기화한다. 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.(지..
[C] 지역 변수 2차원 배열 동적 할당 및 해제 코드
#define _CRT_SECURE_NO_WARNINGS #include #include #include void main() { int n; scanf("%d", &n); // 동적할당 int** arr = (int**)malloc(sizeof(int*) * n); memset(arr, 0, sizeof(int*) * n); if (arr == NULL) return; for (int y = 0; y < n; y++) { arr[y] = (int*)malloc(sizeof(int) * n); memset(arr[y], 0, sizeof(int) * n); } for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) arr[y][x] += 1 + y + x;..
[C] main 함수에게 return 이란?
return 은 c언어의 예약어이다. 리턴값은 없거나 있다면 정수형이어야 한다. C++ 표준 문서(43p)에는 정확하게 It shall have a return type of type int, but otherwise its type is implementation defined 이렇게 되어 있다. main 함수의 리턴값은 int형의 타입을 가지는 것이 좋지만 구현 방식에 따라 다른 타입을 가지는 것도 가능하다. 즉 C++ 스팩은 int를 강력히 권장하기는 하지만 강요하지는 않는다. 비주얼 C++은 int, void 모두 가능한데 과거부터 이렇게 써 왔기 때문에 호환성을 더 중요시한다는 입장이다. gcc는 표준의 권고대로 main 함수의 리턴 타입으로 int만 인정한다. main 함수가 리턴하는 값을 탈..

[Unreal] 클래스 기본 객체 (CDO) + 로딩과정 + 로그디버깅 + 인스턴스 생성
UCLASS, 리플렉션, 프레임워크 UClass에는 언리얼 오브젝트에 대한 클래스 계층 구조 정보와 멤버 변수, 함수에 대한 정보를 모두 기록 앞선 강좌에서 하나의 언리얼 오브젝트가 만들어지기 위해서는, 실제 컴파일 전에 언리얼 헤더 툴에 의해 헤더 파일을 분석하는 과정이 선행되며, 이 과정이 완료되면 Intermediate 폴더에 언리얼 오브젝트의 정보를 담은 메타 파일이 생성된다고 설명했다. 언리얼 엔진이 컴파일 전에 먼저 메타 소스 파일과 헤더 파일을 생성하는 목적은 여러가지가 있겠지만, 기존의 C++ 문법에서 제공하지 못하는 런타임에서의 빠른 클래스 정보의 검색이라고 생각한다. 이 메타 정보는 언리얼 엔진이 지정한 UClass라는 특별한 클래스를 통해 보관된다. UClass에는 언리얼 오브젝트에 ..

[C] 문자열(String) - 문자열 저장, 널문자, 문자열 배열, 문자열 크기
문자열(String) 문자의 집합 문자열이라고 하는 데이터 형식은 따로 존재하지 않는다. 문자열은 한문자(char)가 여러 개 이어져 있는 형태다. 문자열 저장 문자열 저장을 위해서는 문자열 길이에 1을 더한 만큼의 크기가 필요하다 왜냐하면 문자열의 끝을 표시하는 널문자(NULL, \0)가 존재하기 때문이다. 널문자 문자열의 끝을 알려주는 역할 \0, 하나의 문자로 취급, 화면에 출력 되지 않음 문자열 배열 문자열 저장 변수. 문자를 연속적으로 나열한 배열형태가 되어야 한다. 문자열의 크기) 실제 문자열 + 1 (NULL 문자) https://codedragon.tistory.com/5274
[실5] 1439 - 뒤집기
#include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string s; cin >> s; int res = 0; for (size_t i = 0; i < s.length(); i++) { if (s[i] != s[i + 1]) res++; } cout 0 ? res / 2 : res); }
[실4] 1755 - 숫자놀이
#include #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); const string numbers[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", }; vector ans; int n, m; cin >> n >> m; for (size_t i = n; i = 10) s = numbers[i / 10] + " " + numbers[i % 10]; else s = numbers[i % 10]; ans.push_back({ s,i ..
[실5] 14916 - 거스름돈
#include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, res = 0; cin >> n; if (n < 5) res = (n % 2 == 0) ? n / 2 : -1; else { int q = n / 5; if (n % 5 == 0) res = q; else { int remain = n - q * 5; if (remain % 2 == 0) res = q + remain / 2; else res = (q - 1) + (remain + 5) / 2; } } cout

C++ 다익스트라(Dijkstra) 알고리즘 개념 및 구현 (무방향 그래프)
다익스트라 알고리즘 다익스트라(dijkstra) 알고리즘은 그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘 중 하나이다. 이 과정에서 도착 정점 뿐만 아니라 모든 다른 정점까지 최단 경로로 방문하며 각 정점까지의 최단 경로를 모두 찾게 된다. 매번 최단 경로의 정점을 선택해 탐색을 반복하는 것이다. 참고로 그래프 알고리즘 중 최소 비용을 구하는 데는 다익스트라 알고리즘 외에도 벨만-포드 알고리즘, 프로이드 워샬 알고리즘 등이 있다. 동작 단계 ① 출발 노드와 도착 노드를 설정한다. ② '최단 거리 테이블'을 초기화한다. ③ 현재 위치한 노드의 인접 노드 중 방문하지 않은 노드를 구별하고, 방문하지 않은 노드 중 거리가 가장 짧은 노드를 선택한다. 그 노드를 방문 처리한다. ④ ..