diff --git "a/yuyu0830/\341\204\220\341\205\241\341\206\267\341\204\211\341\205\242\341\206\250/12851.cpp" "b/yuyu0830/\341\204\220\341\205\241\341\206\267\341\204\211\341\205\242\341\206\250/12851.cpp" deleted file mode 100644 index bec7364..0000000 --- "a/yuyu0830/\341\204\220\341\205\241\341\206\267\341\204\211\341\205\242\341\206\250/12851.cpp" +++ /dev/null @@ -1,85 +0,0 @@ -// BFS 골드 4 숨바꼭질 2 https://www.acmicpc.net/problem/12851 -#include -#include -#include - -using namespace std; - -int n, k; -int dist[100001] = {0, }; -bool visited[100001] = {0, }; - -void solve() { - // 2개의 큐를 번갈아 사용하기 위한 큐 배열, 불리언 변수 - priority_queue, greater> q[2]; - bool e = false; - - // 현재 탐색에서 탐색중인 위치를 저장 - vector visitedVec; - - q[e].push(n); - dist[n] = 1; - visited[n] = 1; - - if (n == k) { - printf("0\n1"); - return; - } - - int time = 1, cnt = 0; - - while (true) { - while (!q[e].empty()) { - int cur = q[e].top(); - - q[e].pop(); - - for (int i : {cur - 1, cur * 2, cur + 1}) { - if (i < 0 || i > 100000) continue; - - // 목표 위치에 도착한 경우 경우의 수 저장 - if (i == k) cnt += dist[cur] + 1; - - // 첫 방문인 경우 다음 탐색 큐에 저장 - if (!dist[i]) { - q[!e].push(i); - visitedVec.push_back(i); - } - - // 방문한 위치에 현재 위치의 경우의 수 더하기 - // 이전 탐색에서 탐색한 위치는 방문 안하도록 - if (!visited[i]) - dist[i] += dist[cur]; - - // 탐색 도중 숫자가 커지면 탐색을 종료, 탐색중 큐 비우기 - if (cur > k) break; - } - - // 숫자가 커져서 탐색을 종료하면 남은 큐는 비워주기 - if (cur > k) { - q[e] = priority_queue , greater> (); - break; - } - } - - if (cnt) { - printf("%d\n%d", time, dist[k]); - break; - } - - // 이번 탐색에서 방문한 노드들 전부 표시 해주기 - while (!visitedVec.empty()) { - int v = visitedVec.back(); - visitedVec.pop_back(); - visited[v] = 1; - } - - e = !e; - time++; - } -} - -int main() { - cin >> n >> k; - solve(); -} \ No newline at end of file diff --git "a/yuyu0830/\352\267\270\353\246\254\353\224\224/1202.cpp" "b/yuyu0830/\352\267\270\353\246\254\353\224\224/1202.cpp" new file mode 100644 index 0000000..0799d4d --- /dev/null +++ "b/yuyu0830/\352\267\270\353\246\254\353\224\224/1202.cpp" @@ -0,0 +1,56 @@ +#include +#include +#include +#include + +using namespace std; + +typedef pair ii; + +#define fastio cin.tie(NULL); cin.sync_with_stdio(false); + +ii gems[300001]; +int bags[300001] = {0, }; + +priority_queue q; + +int main() { + fastio + + // input + int n, k; cin >> n >> k; + + for (int i = 0; i < n; i++) + cin >> gems[i].first >> gems[i].second; + + for (int i = 0; i < k; i++) + cin >> bags[i]; + + // Sort gems, bags ascending order + // gems sort by weight + sort(gems, gems + n); + sort(bags, bags + k); + + // ans can be more then int max value + // 300,000 * 1,000,000 + long long int ans = 0; + int cnt = 0; + + for (int i = 0; i < k; i++) { + int curBag = bags[i]; + + // push all the gems that can put in current bag into the priority queue + while (cnt < n && gems[cnt].first <= curBag) { + q.push(gems[cnt].second); + cnt++; + } + + // if queue is not empty, top of queue will be max price that can get in current bag + if (!q.empty()) { + ans += q.top(); + q.pop(); + } + } + + printf("%lld\n", ans); +} \ No newline at end of file diff --git "a/yuyu0830/\341\204\220\341\205\241\341\206\267\341\204\211\341\205\242\341\206\250/1865.cpp" "b/yuyu0830/\355\203\220\354\203\211/1865.cpp" similarity index 100% rename from "yuyu0830/\341\204\220\341\205\241\341\206\267\341\204\211\341\205\242\341\206\250/1865.cpp" rename to "yuyu0830/\355\203\220\354\203\211/1865.cpp"