본문 바로가기

c++9

백준 2357 : 최솟값과 최댓값 (C++) [Segment tree] 최솟값만 구하던 문제와 같은 방식으로 풀면 된다. 다만 두 개의 값을 반환하기 위해 segment tree를 각각 만들어서 진행한다. **문제풀이 방법 - 최솟값을 구하기 위한 segment tree와 최댓값을 구하기 위한 segment tree를 각각 만들고, 연산하는 것도 각각 연산 ***코드 #include #include #include #include #define INF 2e9 #define MAX_N 100001 using namespace std; int N, M; int min_value, max_value; vectorarr; vectorsegment_tree_min; vectorsegment_tree_max; int build_segment_tree_min(int node, int s.. 2022. 4. 1.
백준 2042 : 구간 합 구하기 (C++) [Segment tree] 기본적인 segment tree를 연습해 볼 수 있는 문제이다. **문제풀이 방법 - Segment tree 생성, 새 값이 들어왔을 때 update 함수, 합을 구하는 함수 작성 ***코드 #include #include #include typedef long long int ll; using namespace std; // start, end : node가 담당하고 있는 구간 // left, right : 합을 구하려는 구간 // Segment tree 초기화 ll init(vector& arr, vector& tree, int node, int start, int end) { if (start == end) { return tree[node] = arr[start]; } else { int mid .. 2022. 4. 1.
SWEA 5604 : 구간합[D4] (C++) **문제 풀이 방법 - 입력된 숫자의 각 자리수를 더해줘야 하므로, modular 연산(나머지를 사용하는)을 사용한다. - 0~9 자리수 배열을 만든 후, 해당 자리의 값이 몇 번 등장하는지 count 한다. * Java 코드로 친절한 문제풀이를 해주신 은서파님께 감사드립니다. https://goodteacher.tistory.com/403 https://tv.naver.com/v/22678458 *** 코드 #include using namespace std; typedef long long ll; ll arr[10]; void parse(ll x, ll delta) {// 숫자 x의 각 자리수에 delta 만큼 count 증가 while (x > 0) { arr[x % 10] += delta; x /.. 2022. 3. 30.
SWEA 1232 : 사칙연산[D4] (C++) ** 문제 풀이 방법 - 처음 들어오는 값이 숫자인지 문자(연산자)인지 판별 후 재귀적으로 연산 *** 코드 #include #define MAX_N 1001 using namespace std; struct tree { bool is_num; int num; int child_node[2]; }tree[MAX_N]; double calculation(int idx) { if (tree[idx].is_num) { return (double)tree[idx].num; } else { double c1 = calculation(tree[idx].child_node[0]); double c2 = calculation(tree[idx].child_node[1]); switch (tree[idx].num){ ca.. 2022. 3. 28.