전체 글

게임 개발자의 개발블로그
C++에는 포인터가 존재한다. 이 포인터 변수를 통해 다른 변수(lvalue)가 가진 값(rvalue)을 참조할 수 있다. 그리고 이 포인터 변수의 앞에 * 연산자를 놓으면 포인터가 참조하는 변수에 역참조할 수 있다. 이 시간에는 연산자 *(Asterisk, 별표)의 사용법을 알아본다. 코드는 언리얼 엔진에서 사용하는 C++ 클래스이다. 1. 포인터 변수의 역참조 연산자 // Mover.cpp void UMover::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); A..
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/crtisvalidheappointer?view=msvc-170 _CrtIsValidHeapPointer Learn more about: _CrtIsValidHeapPointer learn.microsoft.com 마이크로소프트 공식 문서에 따르면 해당 오류는 다음으로 정의된다. _CrtIsValidHeapPointer => 특정 포인터가 어떤 C 런타임 라이브러리(반드시 호출자의 CRT일 필요는 없다)에 의해 할당된 힙에 존재하는지를 확인한다. 도통 무슨 말인지 모르겠지만 런타임 라이브러리 정도는 알아둘 필요가 있다. C 런타임 라이브러리에서 런타임 라이브러리는 컴파일러가 관리하는 프로..
· Algorithms
https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 이 문제를 처음 푼게 3년전이었고 그 때는 한 3일간 고군분투했지만 끝내 통과하지 못했다. 질문 게시판에 존재하는 모든 테스트케이스를 통과했음에도 '틀렸습니다'가 나오는 이유는 아직도 모르겠다. 3년이 지난 지금 다시 풀어보았고 역시나 쉽지 않은 문제였다. 때문에 다른 사람이 푼 코드를 참고하여 풀었다. 참고한 코드: https://bio-info.tistory.com..
· Algorithms
https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 1) 처음에는 위상정렬의 일부 개념(진입차수가 0인 노드부터 탐색)을 사용한 dfs 문제인 줄 알았으나 2) 위상정렬과 완전히 동일한 알고리즘을 구현하는 문제라고 깨달았다. 1)의 이유 -> 건설 과정에서 택하는 루트는 단 하나이다. 여러개의 루트로 가서 하나의 노드에서 만난다면 그 노드에서 택하는 이전 루트는 누적된 건설시간이 더 큰 하나의 루트이다. 즉 dfs 로 구현해야 한다고 판단하였..
typeof() 컴파일 타임에 객체의 타입을 얻는다. 반환 타입은 System.Type 이다. 사용예시) typeof(타입명) 인스턴스가 아닌 타입명만 들어갈 수 있다. 예를들어, using System; class Temporary {} public static void Main(string[] args) { Temporary tmp = new Temporary(); Console.WriteLine(typeof(Temporary)); // Console.WriteLine(typeof(tmp)); // Compile Error } Temporary 형으로 선언된 인스턴스 tmp는 typeof의 인자로 들어갈 수 없다. .GetType() 런타임에 생성된 인스턴스의 타입을 얻는다. 반환 타입은 System..
· Algorithms
https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 이 문제는 웰노운에 속한다고 한다.. 트리의 지름이란 문제에서 가중치의 합이 가장 큰 경로가 존재하며, 그 경로의 가중치를 말한다. 이번 리뷰는 문제풀이보다는 증명 위주이다. 자세한 증명 방법은 아래 블로그 주소를 참고바란다. https://blog.myungwoo.kr/112 트리의 지름 구하기 트리에서 지름이란, 가장 먼 두 정점 사이의 거리 혹은 가장 먼 두 정점을 연결하..
· Algorithms
https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net DP문제이다. 처음 접근할 때는 그리디, 완전탐색, DP 중 하나일 것으로 가정한다. 우선 그리디로 해보자. 3 1 2 3 4 5 6 4 9 0 예제에 나온 숫자대로 탐색할 때 가장 큰 혹은 작은 숫자만 더해서 내려간다고 할 때 가장 큰 숫자로는 3 -> 6 -> 9 = 18 (정답) 이지만 가장 작은 숫자로는 1 -> 4 -> 4 = 9 (오답) 으로 실제 정답인 1 -> 5 -> 0 = 6 보다 크기 때문에..
· Algorithms
https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net dfs를 통한 완전탐색이다. 완전탐색인지를 알아차리는 것이 중요하기 때문에 시간복잡도 계산하는 연습을 꾸준히 해두어야 한다. 세로길이 m, 가로길이 n인 배열에서 벽 3개를 세우는 경우의 수는 총 m x n 개에서 3개를 택하는 조합과 같다. 그렇게 벽이 세워진 상황에서 배열의 모든 공간을 하나씩 탐색하는 경우의 수는 {mn * (mn - 1) * (mn - 2) / (3 * 2 * 1)} * mn 이 된다...
hyunbae
i_love_cpp