https://www.acmicpc.net/problem/24391 분리 집합(Union-Find)으로 푸는 문제이다.문제의 제한시간이 0.5초인데, 입력의 제한이 최대 100,000이기 때문에 최소 O(n log₂ n) 정도가 나와야 한다. 처음에 이어져있는 건물들이 나열될 때, 입력이 주어질 때마다 Union을 해주면, 다음 입력에 부모가 같은 입력이 나왔을 때 시간을 절약할 수 있다. Union이 모두 끝났으면, 정답을 출력할 입력을 차례대로 받는다.두 건물 사이를 이동하는 횟수를 구하는 것이므로, 입력으로 사용할 변수를 두 개 선언한다. (현재 건물, 이동할 건물)맨 처음 강의를 들으러 이동하는 횟수는 세지 않으므로, 현재 건물 변수의 입력을 먼저 받는다.순회를 돌며, 다음으로 이동할 건물의 입력..
📚분류
https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제는 각 자리에 +가 들어간 경우, -가 들어간 모든 조합에서 그 조합의 합이 타깃 넘버와 같은 조합이 몇 개인지 구하는 문제이다. 다음 배열의 수를 +한 경우와 -한 경우를 모두 DFS를 해주면 모든 조합의 수가 나오게 된다.DFS의 깊이가 배열 원소의 개수만큼 갔다면, 그 조합의 합이 타깃 넘버인 경우 정답 카운트를 1 올린다.#include #include using namespace std;void DFS(vector& numbers, cons..
https://school.programmers.co.kr/learn/courses/30/lessons/389480 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr B 도둑이 최대한 많은 보물을 훔쳐야 A 도둑이 최소의 흔적으로 훔칠 수 있다.근데, 또 어느 한 보물에 대해서 B 도둑의 흔적이 A 도둑의 흔적에 비해 많이 들어가는 경우에는 B 도둑보다 A 도둑이 훔쳐야 이득인 경우도 있다.따라서, 어느 한 보물에 대해서 A의 흔적 - B의 흔적의 오름차순으로 보물을 정렬한다. 다음과 같은 입력이 있다고 하자.{ {1, 3},{1, 3},{1, 1}, {1, 1}, {1, 1}, {2, 3}, {2, 3} }, 8..

정적/동적 라이브러리를 사용하면, 여러 프로젝트 간의 빌드 순서를 맞춰줘야 할 때가 있다.예를 들어, DLL 프로젝트를 수정했으면 이 프로젝트를 먼저 빌드해서 lib 파일을 업데이트 해줘야, 이를 사용하는 프로젝트 빌드 시 올바르게 동작할 것이다. 프로젝트 종속성은, B 프로젝트를 먼저 빌드하고 A 프로젝트를 빌드해야할 때, A의 종속성에 B를 추가시키면, A 프로젝트를 빌드하면 자동으로 종속성이 설정된 프로젝트들을 먼저 빌드한 뒤, 자신을 빌드하게 된다. 두 프로젝트가 있다.Engine은 DLL이고, Game은 이를 사용하고 있어서, Engine을 먼저 빌드하고 Game을 빌드해야 한다. 솔루션의 속성으로 간다. Project Dependencies로 가면, 프로젝트들의 종속성을 설정할 수 있다.G..

커밋할 깃 프로젝트 파일로 들어간다.프로젝트 폴더 경로를 누르고 cmd를 입력해서 들어가도 되고, 기본 cmd에서 폴더 경로를 찾아가도 된다. git status를 입력하면 현재 파일들의 커밋 상태를 볼 수 있다.Changes~ 라고 되어있는 파일은 깃허브에 올라간 파일에서 수정된 파일 목록이다.Untracked~ 라고 되어있는 파일은 깃허브에 올라가지 않은, 새로 추가된 파일 목록이다. git add "파일 이름"을 입력하면, 해당 파일을 커밋할 목록에 추가할 수 있다.ConsoleEngine.sln 파일을 커밋 목록에 추가한 후, git status를 입력해 현재 파일들의 커밋 상태를 봤다.ConsoleEngine.sln 파일은 커밋 목록에 올라간 것을 확인할 수 있다. (초록 글씨로 뜸) 근데..

git을 사용하는 데 있어 필수적으로 알아야 할 명령어들로, 새 리포지토리를 생성해 보자. 새 리포지토리를 만들 폴더로 간다.폴더 경로를 클릭해서 cmd를 입력하면, 해당 폴더 경로를 가리키는 cmd 창이 열린다. git init을 입력하면, 이 폴더에 git 저장소를 초기화할 수 있다. 그러면, 다음과 같이 폴더에 .git 파일이 생긴 것을 확인할 수 있다. 다음으로, git 프로필? 설정을 해보자.git config --list를 입력하면, git config를 통해 설정한 모든 내용을 확인할 수 있다. 일단 기본적으로 사용자 이름과 사용자 이메일, git 텍스트 편집기를 설정해 보자. (필자는 이미 설정했다) git config --global user.name "이름"을 입력하면, 사용자 ..

코드가 방대해지면, 어디서 뭘 구현해야 했었는지 까먹을 때가 많다. 이럴 때, 작업 목록(Task List)을 활용해 보자.View -> Task List를 통해 작업 목록을 띄운다. //으로 주석을 만들고, 앞에 Todo 키워드를 붙여주면 다음과 같이 Task List에 표시가 된다.제목 한 줄과, 해당 주석의 프로젝트 이름, 주석이 적힌 파일 이름, 줄까지 세세하게 나온다.더블 클릭하면, 해당 주석을 적은 위치로 이동한다.

RTTIRTTI는 RunTime Type Information의 약자이다. 이를 번역하면 실시간 타입 정보라는 의미가 된다.일반적으로 변수의 이름이나 구조체, 클래스의 타입은 컴파일러가 컴파일하는 동안에만 필요하기 때문에 컴파일을 거친 후에는 이 정보들이 남아있지 않다.하지만, 특정한 객체의 정보, 예를 들면 클래스의 이름이나 어떤 클래스를 상속했는지 등을 알아야 할 때가 있는데 이를 위해 필요한 것이 실시간 타입 정보(RunTime Type Information - RTTI)이다.RTTI는 오직 다형성 클래스, 즉 최소 하나 이상의 가상 함수(virtual function)를 가진 클래스에 대해서만 생성된다.컴파일러는 각 다형성 클래스에 대해 std::type_info 객체를 생성하고, 이 객체에 대한..