백준 15654 (DFS, 백트래킹, 정렬)
하고싶은거/알고리즘 문제풀이2024. 4. 14. 13:38백준 15654 (DFS, 백트래킹, 정렬)

15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net 과정 [C++/백준문제] - 백준 15650, 15652 (DFS) 백준 15650, 15652 (DFS) 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하 ssin-estella.tistory.com 이거랑 비슷한 문제인데 1부터 시작이 아니다. : 때문에 오름차순으로 정렬을 해줘야한다. 본인은 포함하지..

타입 변환 연산자
하고싶은거/C++2024. 4. 13. 15:00타입 변환 연산자

c++에서는 기존의 데이터형을 다른 데이터형태로 변환하는 "캐스팅" 이라는 과정이 있다. 캐스팅자세한 정보: 캐스팅learn.microsoft.com이러한 캐스팅을 해주는 타입(형)변환 연산자(캐스팅 연산자)가 있는데dynamic_caststatic_castconst_castreinterpret_cast가 있다.C++ 캐스트 연산자 형태static_cast(변경할 대상);static_castc언어의 형변환 문제점을 줄인 방식이다.컴파일 타임에 타입 검사를 제공하고, 강제변환이 아닌 논리적으로 가능한 타입에 대해서만 캐스팅을 진행한다.→ 따라서 컴파일에러로 잡아낼 수 있다.dynamic_cast상속관계에서 다운 캐스팅을 할 때 안전하게 캐스팅을 할 수 있다.+ 다운캐스팅?: 부모클래스 객체가 자식클래스 타..

스마트 포인터
하고싶은거/C++2024. 4. 12. 14:27스마트 포인터

스마트 포인터는 c++11부터 지원하는 기능으로, 메모리관리를 위한 기능이다. c++는 new를 사용해서 포인터로 실제 메모리를 가리키도록 하는데, new를 사용할 경우 다 사용한 후에 메모리를 해제해줘야 한다.(delete, nullptr) 그래서 스마트 포인터를 사용해서 자동으로 메모리 해제를 해서 메모리 관리의 효율성을 높힐 수 있다. Part1 12. 언리얼 엔진 메모리 관리UObject 선언 기본 원칙 언리얼 오브젝트 포인터 : UPROPERTY 선언 메모리 : 가지비컬렉터가 자동으로 관리하도록 위임 언리얼 엔진 자동 메모리 관리 C++ 메모리 관리 문제점 : 저수준으로 메모리 주ssin-estella.tistory.com이전 언리얼엔진의 가비지컬렉션과 비교하여 언리얼오브젝트가 아닌 c++오브젝..

비선형구조 : 트리
하고싶은거/자료구조&알고리즘 공부2024. 4. 12. 13:38비선형구조 : 트리

선형 구조 : 자료를 순차적으로 나열한 형태 배열 연결 리스트 스택/큐 비선형 구조 : 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태 트리 그래프 트리 구성 요소 (너무.. 깔끔한 그림;) 트리는 그래프와 비슷한 구성 요소를 갖는데, 그래프의 정점 → 트리의 노드 이다. 또한, 그래프와 살짝 비교될만한게, 트리는 계층구조를 가지고 있다. 그래서 부모노드, 자식노드 이런 용어가 생긴 것. 레벨 vs 높이 vs 깊이 아파트로 비교했을 때, 레벨 : 각 층 여기는 0층, 여기는 3층 이런식으로 (루트 노드부터 노드까지 연결된 간선 수의 합) 높이 : 이 아파트의 최고 높이 (가장 긴 루트 경로의 길이) 깊이 : 해당 층수까지의 높이 = 레벨 (루트 경로의 길이) Heap Tree (우선순위 큐) 힙트리는 ..

백준 15650, 15652 (DFS)
하고싶은거/알고리즘 문제풀이2024. 4. 12. 11:24백준 15650, 15652 (DFS)

15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 과정 처음 보자마자 다중 for문이 생각났다. 다중 for문이면 대부분 DFS로 풀 수 있던걸 생각해서 DFS로 접근 처음에는 감이 안잡혔는데, 다음 그림을 그리게 된다. 1~6까지 수를 기준으로 3개의 숫자를 가진 수..

백준 12865 (DP)
하고싶은거/알고리즘 문제풀이2024. 4. 11. 16:04백준 12865 (DP)

12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 과정 처음에는 DP : 자신을 포함하는 물건들의 최대 가치 를 담는 용도였다. #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N = 0; // 물건의 수 int K = 0; // 최대 무게 int W = 0; // 물건의 무게 i..

백준 11725 (트리, DFS)
하고싶은거/알고리즘 문제풀이2024. 4. 10. 19:13백준 11725 (트리, DFS)

11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 과정 대놓고 트리라고 하니까.. 그냥 DFS로 작성했다. 부모만 찾으면 되는 문제라 간단하지만;; vector선언과 메모리크기를 초기화하는 과정에서 vector와 array의 차이를 잘 모르고 있었던 것 같다. 나는 지금까지 왠만하면 vector의 크기를 MAX로 미리 고정하지 않고 resize를 통해 정해줬다. (그게 메모리적으로 이득이니까) 근데 이번 문제는 vector의 장점을 이용해서 하나의 index안에 여러값을 push_back 해야한다. 근데 이럴 경우, 선언 자체를 메모리값이 0인채로 해서 그런지 오류가 발생한다..

백준 11660 (DP, 행렬)
하고싶은거/알고리즘 문제풀이2024. 4. 9. 12:46백준 11660 (DP, 행렬)

11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 과정 x2-x1, y2-y1 범위에 들어있는 숫자를 for문으로 더할까 하다가 그럼 시간초과가 날 것 같아서 애초에 숫자를 받을 때, 같은 열!!!!! 기준으로 누적값을 벡터에 저장한 후, 범위를 받아서 최대좌표의 누적값 - 최소 좌표의 누적값 을 했다. 이 문제를 풀 때 가장 시간이 오래걸린 점은 바로 행렬을 개같이 못했다는 점이다. 행 = Row = x값 = 가로 열 = Column = y값 = 세로 코드 #inclu..

비선형 구조 : 그래프 DFS, BFS, 다익스트라
하고싶은거/자료구조&알고리즘 공부2024. 4. 8. 17:15비선형 구조 : 그래프 DFS, BFS, 다익스트라

선형 구조 : 자료를 순차적으로 나열한 형태 배열 연결 리스트 스택/큐 비선형 구조 : 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태 트리 그래프 그래프 구성 요소 정점(Vertex) : 데이터 간선(Edge) : 정점들을 연결하는데 사용 가중치 그래프 : 각 간선에 가중치(중요도, 거리등)가 있는 그래프 방향 그래프 : 정점간의 방향이 있는 그래프 DFS 깊이 우선 탐색 Depth First Search 막다른 길(더이상 연결된 간선이 없을 때 까지)이 나올 때까지 정점을 계속 방문 하는 그래프 끝까지 갔다가 다시 시작 정점으로 돌아오는 부분은 재귀함수로 구현할 수 있다. 그래프의 전체적인 모양을 파악하기 쉽다. void Dfs(int here) { // 방문 visited[here] = true;..

백준 11053 (DP)
하고싶은거/알고리즘 문제풀이2024. 4. 8. 11:42백준 11053 (DP)

11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 과정 맨 처음 문제를 보고 너무 쉽다고 생각했다. 그냥 수열 받을 때 마다 최대값 저장해서 비교하면 되는거 아닌가? 해서 나온 코드.. #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N = 0; // 수열의 크기 ve..

image