[ 백준 10868 ] 최솟값 (C++, 세그먼트 트리)
[문제보기] [해결과정] - 세그먼트 트리 활용 [소스코드] #include #include #include #include #include using namespace std; typedef long long ll; #define MAX 400005 int n, m, a, b; ll minTree[MAX*10]; ll node[MAX]; // init(배열, 위치, 시작점, 끝점) ll minInit(ll arr[], ll treeIdx, ll dataIdxL, ll dataIdxR) { if (dataIdxL == dataIdxR) return minTree[treeIdx] = arr[dataIdxL - 1]; ll mid = (dataIdxL + dataIdxR) / 2; return minTree..
2021. 4. 17.
[ 백준 2357 ] 최솟값과 최댓값 (C++, 세그먼트 트리)
[문제보기] [해결과정] - 세그먼트 트리 활용 1. minTree, maxTree 구별 2. 각각 init함수와 query함수 작성 [소스코드] #include #include #include #include #include using namespace std; typedef long long ll; #define MAX 400005 int n, m, a, b; ll minTree[MAX*10]; ll maxTree[MAX*10]; ll node[MAX]; // init(배열, 위치, 시작점, 끝점) // init_최소 트리 ll minInit(ll arr[], ll treeIdx, ll dataIdxL, ll dataIdxR) { if (dataIdxL == dataIdxR) return minTre..
2021. 4. 17.
[ 백준 11659 ] 구간 합 구하기 (C++, 세그먼트 트리)
[문제보기] [해결과정] - 세그먼트 트리 사용 [소스코드] typedef long long ll; #include #include #include #include using namespace std; ll node[400000]; ll tree[400000]; // init(배열, 위치, 시작, 끝) ll init(ll arr[], ll treeIdx, ll dataIdxL, ll dataIdxR){ if(dataIdxL == dataIdxR) return tree[treeIdx] = arr[dataIdxL-1]; ll mid = (dataIdxL + dataIdxR) / 2; return tree[treeIdx] = init(arr, 2*treeIdx, dataIdxL, mid) + init(arr,..
2021. 4. 17.
[ 백준 10026 ] 적록색약 (C++)
[문제보기] [해결과정] 1. input -> n, arr 입력받기 2. 정상인 사람이 볼 때, -> arr을 순회하며, 방문체크가 안되있는 좌표를 queue에 넣고 bfs수행, -> 진입할 때, 방문체크 하고 gNum++ (그룹수) -> bfs(0) 플래그 0으로 진입 3. bfs(0) -> bfs수행 하는데, flag가 0인 부분으로 진입 4. 적록색약인 사람이 볼 때, -> 먼저 check 배열 초기화, gNum = 0으로 변경 -> 맵을 순회하며 R을 G로 바꾸거나 혹은 G를 R로 다 바꿔버림. 5. 적록색약인 사람이 볼 때 기능 실행 -> arr을 순회하며, 방문체크가 안되있는 좌표를 queue에 넣고 bfs수행, -> 진입할 때, 방문체크 하고 gNum++ (그룹수) -> bfs(1) 플래그 ..
2020. 3. 18.