본문 바로가기

728x90
SMALL

BAEKJOON/자료 구조

(46)
백준 23757번 [아이들과 선물 상자](C++) -yes6686- 티스토리 백준 문제 풀이: 23757 (아이들과 선물 상자)문제 링크: https://www.acmicpc.net/problem/23757문제 설명:아이들에게 선물을 나누어주기 위해 **선물 상자에 있는 선물 개수**를 관리합니다. 각 아이가 원하는 선물의 수를 만족시킬 수 있는지 확인해야 합니다.선물 상자에는 선물 개수가 담겨 있습니다.각 아이는 원하는 선물의 개수가 있으며, 그 수를 가져갈 수 있어야 합니다.선물 상자에서 가장 많은 선물을 가지고 있는 상자부터 선물을 나눠줍니다.모든 아이가 원하는 선물을 만족시키면 **1**을 출력하고, 그렇지 못하면 **0**을 출력합니다.문제 해결 코드#include #include using namespace std;int arr[100001]; // 각 아이가 원하는 ..
백준 1406번 [에디터](C++)-yes6686- 티스토리 백준 문제 풀이: 1406 [에디터]문제 링크: https://www.acmicpc.net/problem/1406문제 설명:초기 문자열에서 커서를 이동하거나 문자 삽입/삭제를 통해 최종 문자열을 만드는 문제입니다. 각 명령은 다음과 같습니다:'L': 커서를 왼쪽으로 이동 (문자열의 시작에선 무시)'D': 커서를 오른쪽으로 이동 (문자열의 끝에선 무시)'B': 커서 왼쪽의 문자 삭제 (문자열이 비어있으면 무시)'P x': 커서 왼쪽에 문자 x 삽입문제 해결 코드#include #include using namespace std;stack st1; // 왼쪽 커서stack st2; // 오른쪽 커서int main() { ios::sync_with_stdio(false); cin.tie(NULL);..
백준 1849번 [순열](C++)-yes6686- 티스토리 백준 문제 풀이: 1849 [순열]문제 링크: https://www.acmicpc.net/problem/1849문제 설명:길이가 n인 배열의 각 요소는 그 배열의 인덱스 값보다 크거나 같은 위치로 이동해야 합니다. 주어진 배열을 기반으로 순열을 만들어야 하며, 이 과정에서 세그먼트 트리를 활용해 효율적으로 해결합니다.문제 해결 코드#include using namespace std;int arr[100001];int ans[100001];int tree[400001];int init(int n, int s, int e) { if (s == e) { return tree[n] = 1; } return tree[n] = init(2 * n, s, (s + e) / 2) + ini..
백준 1777번 [순열복원](C++)-yes6686- 티스토리 백준 문제 풀이: 1777 [순열복원]문제 링크: https://www.acmicpc.net/problem/1777문제 설명:길이가 n인 순열이 주어질 때, 순열을 복원하는 문제입니다. 주어진 입력은 각 순열의 원소가 올바른 위치에 들어가기 위해 필요한 남은 빈자리의 개수를 의미합니다. 세그먼트 트리를 사용하여 효율적으로 순열을 복원합니다.문제 해결 코드#include using namespace std;int arr[100001];int ans[100001];int tree[400001];int init(int n, int s, int e) { if (s == e) { return tree[n] = 1; } return tree[n] = init(2 * n, s, (s + ..
백준 1517번 [버블 소트](C++)-yes6686- 티스토리 백준 문제 풀이: 1517 [버블 소트]문제 링크: https://www.acmicpc.net/problem/1517문제 설명:버블 소트 알고리즘으로 주어진 배열을 정렬할 때, 몇 번의 swap이 발생하는지 계산하는 문제입니다. 단순히 O(n²)의 버블 소트를 구현하는 대신, 세그먼트 트리를 사용해 효율적으로 해결합니다.문제 해결 코드#include #include #include using namespace std;vector> arr;int tree[2000001];int init(int n, int s, int e) { if (s == e) { return tree[n] = 1; } return tree[n] = init(2 * n, s, (s + e) / 2) + in..
백준 2243번 [사탕상자](C++)-yes6686- 티스토리 백준 문제 풀이: 2243 [사탕상자]문제 링크: https://www.acmicpc.net/problem/2243문제 설명:사탕 상자에 여러 가지 맛의 사탕이 있으며, 이 사탕들을 꺼내거나 추가할 수 있는 기능을 제공합니다. 사탕 상자는 총 1,000,000개의 칸으로 이루어져 있으며, 각 칸에 사탕이 들어 있습니다. 두 가지 작업을 수행합니다:맛의 순서에 따라 사탕을 꺼내는 작업특정 맛의 사탕을 추가하는 작업문제 해결 코드#include using namespace std;int arr[1000001];int tree[4000001];int query(int n, int s, int e, int d) { if (s == e) return e; if (tree[2 * n] >= d) { ..
백준 5676번 [음주 코딩](C++)-yes6686- 티스토리 백준 문제 풀이: 5676 [음주 코딩]문제 링크: https://www.acmicpc.net/problem/5676문제 설명:양수, 음수, 또는 0으로 이루어진 배열에 대해 주어진 구간의 곱의 부호를 구하거나, 특정 인덱스의 값을 변경하는 작업을 효율적으로 처리하는 문제입니다. 세그먼트 트리를 이용하여 O(log n) 시간 안에 구간 곱 계산과 값 변경을 처리합니다.문제 해결 코드#include using namespace std;int arr[100001];int t[400001];int init(int n, int s, int e) { if (s == e) { return t[n] = arr[s]; } else { return t[n] = init(2 * n, s..
백준 12837번 [가계부 (Hard)](C++)-yes6686- 티스토리 백준 문제 풀이: 12837 [가계부 (Hard)]문제 링크: https://www.acmicpc.net/problem/12837문제 설명:1부터 N까지 번호가 매겨진 계좌의 금액을 관리하며, 다음 두 가지 작업을 효율적으로 수행하는 문제입니다:타겟 계좌에 금액 추가특정 구간의 계좌 합을 계산각 작업에 대해 효율적인 시간 복잡도를 유지해야 하므로 세그먼트 트리를 사용합니다.문제 해결 코드#include using namespace std;long long int arr[1000001];long long int t[4000001];long long int sum(int n, int s, int e, int l, int r) { if (r e) return 0; if (l > n >> m; ..

728x90
LIST