Algorithm (29) 썸네일형 리스트형 BOJ 1431 Cpp Feat. Sort Function Custorm Sort Function을 커스텀해서 정렬 조건을 설정하는 문제이다. 문제에서 제시한 3가지 조건을 comp 비교 함수 내부에 잘 정의하면 쉽게 풀 수 있다. condtion1 : 길이가 더 작은 문자열이 앞으로 온다. condition2 : 모든 수의 합을 비교해 작은 합이 먼저 온다. condition3 : 사전순으로 정렬한다. // a의 합이 b보다 작다 if (a_digit_sum != b_digit_sum) return a_digit_sum tip : 정렬되어야 하는 순서를 비교 연산식으로 리턴하는 것이 실수를 줄일 수 있다. PS2026/12월/1431.cpp at main · novvvv/PS202626년 알고리즘 문제 풀이 레포지토리 . Co.. Solved.ac Class3++ AC 5430 Cpp 문제에서 제시하는대로 단순히 배열에 담고 원소를 Reverse 하는 방식은 시간 복잡도가 O(N)만큼 소요된다. 따라서 최악의 경우 100,000(p) * 100,000(n) * 100(t)를 하면 시간초과가 발생하기에 단순 Reverse로는 문제를 풀이할 수 없다. 그렇기에 처음에는 current_deque와 reverse_deque 2개를 두어 R연산이 발생할때마다 swap하는 방식을 채택하였으나 마찬가지로 시간초과가 발생하여 코드를 분석해 보았더니 Java나 Python같은 언어와는 달리 Cpp에서는 아래 코드처럼 덱에 다른 덱을 대입하면 참조에 의한 복사가 아닌 값에 의한 복사가 발생해 단순 주소값을 변경하는것이 아니라 모든 원소를 복사하여 O(N)만큼의 시간 복잡도가 소요된다는 정보를 얻게되었다.. [Cpp] vector max_element, min_element, distance * Cpp STL max_element, min_element의 사용법과distance method를 사용해 벡터 내부의 최대/최소 원소의 인덱스를 구하는 방법에 대해 소개합니다.#max_element / min element usage max_element(vector_name.begin(), vector_name.end())min_element(vector_name.begin(), vector_name.end()) Header에 선언되어 있다. 벡터 내부의 최대/최소 원소의 첫 번째 위치를 "이터레이터" 형태로 반환한다. 반환타입이 "값"이 아닌 "이터레이터" 이기에 * 연산자를 사용해 값에 접근해야 한다. #include #include #include using namespace std;int .. [Algorithm] Union Find #1 About Union-Find유니온 파인드는 여러 개의 노드가 주어졌을 때 특정한 노드들이 같은 그룹에 속해있는지 판별하고 여러 개의 그룹 노드를 하나로 합치는 작업을 수행할 때 사용되는 알고리즘이다.이름에서 유추 가능하듯 노드를 한 그룹으로 합치는 "유니온(Union)"연산과 노드가 특정 그룹 내에 존재하는지 판별하는 "파인드(Find)"연산으로 이루어진다. Union-Find 알고리즘을 직접 구현해 보자.우선 크기가 5인 배열을 모두 -1로 초기화해준다. 각 배열의 원소값은 해당 인덱스의 부모 노드를 가리킨다. 배열의 원소가 -1이라면 부모 노드가 자기 자신 즉, 루트노드라는 의미이다. union(1, 5)노드1과 노드5를 유니온 연산을 진행한다. 노드5는 노드1의 자식노드가 되며 배열의 5번째.. [Algorithm] 2D Prefix Sum BOJ 23247 본 문서는 이차원 배열에서 누적합 알고리즘을 적용하는 방법에 대해 다루고 있습니다. BOJ 23247 Ten 문항을 기반으로 설명합니다. https://www.acmicpc.net/problem/23247 이차원 배열에서 누적합을 구하는 방법1. 행 방향으로 원소들의 누적합을 계산한다. // 2차원 누적합 계산 로직 // [Logic1] row(행) 방향으로 모든 원소의 합을 구한다. for (int y = 1; y 2. 행 방향으로 누적된 누적합 배열을 기반으로열 방향으로 누적합을 계산한다. 그러면 최종적으로 2차원 배열 누적합이 완성된다.apple_sum 누적합의 1행2열(17)에는기존 apple 배열의 0행0열부터 1행2열까지의 합이 담기게 된다. // [Logic2] C.. Cpp Algorithm Technic Climits 가장 큰 최대, 최소값 설정하기 알고리즘 문제를 풀이하다 보면 가장 큰 값을 초기화해야 한다던지가장 작은 값을 초기화해야 하는 케이스가 빈번하게 발생한다. 그럴 때마다 문제에서 제시해 준 조건으로 나올 수 있는 최대 최소를 계산했는데, climits 내부의 LLONG_MAX, LLONG_MIN을 활용하면 간편하게 계산할 수 있어 정리해 보고자 한다. #include #include using namespace std;int main() { cout LLONG_MAX : 9223372036854775807LLONG_MIN : -9223372036854775808Program ended with exit code: 0 LLONG_MAX의 경우 64bit long long 정수형의 최댓값인 2^63−1 (9223372036854775.. [Cpp] STL 2D Vector Cpp STL의 2차원 벡터를 생성하는 방법에 대해 정리한 문서입니다.개인적인 공부 내용을 정리하는 용도로 작성한 글이기에 잘못된 내용을 포함하고 있을 수 있습니다. 2차원 벡터를 선언하는 방법은 크게 2가지로 구분됩니다.Case1. 벡터 내부에 벡터를 선언하여 2차원 벡터를 생성하는 방식Case2. 1차원 벡터 배열을 사용해 2차원 벡터처럼 사용하는 방식 1번째 케이스는 Row, Column이 모두 동적인 벡터로 벡터 안에 백터가 들어가 있는 형태입니다. 반면 2번째 케이스는 Row는 정적이지만 Column은 동적인 벡터로 1차원 벡터를 배열 형태로 선언하여실제로는 1차원 벡터이지만 2차원 벡터와 같이 사용 가능합니다. 주로 그래프 관련 알고리즘 문제를 풀이할때 인접리스트를 정의할때 2번 방식을 자주 .. [BOJ] 18115 카드 놓기 Cpp 문제풀이 INFO난이도 : SILVER3문제유형 : DataStructure Dequehttps://www.acmicpc.net/problem/18115SOLVE앞 뒤가 모두 뚫려있는 Deque 자료구조를 사용해 문제를 풀이했다. 예제 입력2를 예시로 문제에서 제시해주는 값을 정리해보면 다음과 같다. 초기 상태 : 알 수 없음 기술 사용 순서 : 2 3 3 2 1최종 상태 : 5 4 3 2 1 즉, 기술을 거꾸로 사용하며 반대로 적용시키면 초기 상태를 구할 수 있다. n개의 명령을 저장할 n크기의 cmd 벡터를 정의한 뒤 명령을 입력받는다. int n; cin >> n; vector cmd(n); for(int i = 0; i > cmd[i]; } 명령을 뒤에서부터 반대로 .. 이전 1 2 3 4 다음