fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 28068 (C++) I Am Knowledge
최초 업로드: 2025-10-20 21:17:03
최근 수정 시간: 2025-10-20 21:17:03
게시자: rlatjwls3333
카테고리: 백준
조회수: 10
# [Platinum IV] I Am Knowledge [문제 링크](https://www.acmicpc.net/problem/28068) ## 문제 설명 <p>저택에 살고 있는 마법사는 지하의 도서관에 자주 방문한다. 어느 날, 마법사는 도서관에 있는 책 \(N\)권을 모두 읽기로 했다. 책은 한 번에 한 권씩만 읽을 수 있지만, 책을 읽는 순서는 마음대로 정할 수 있다.</p> <p>책을 읽기 시작하는 것은 힘들지만, 책을 완독하고 나면 지식의 습득으로 인한 즐거움을 얻을 수 있다. 즐거움 수치는 정수로 표현할 수 있으며, 마법사의 초기 즐거움 수치는 \(0\)이다. 모든 책을 읽을 때까지 마법사는 다음 과정을 반복한다.</p> <ol> <li>아직 읽지 않은 책 중 원하는 책을 고른다.</li> <li>고른 책의 번호가 \(k\)라면, 즐거움을 \(a_k\)만큼 소모하여 책을 읽기 시작한다. 이때 즐거움이 \(0\) 미만이 되면 마법사는 책을 완독하지 못한 채로 잠들며, 더 이상 어떤 책도 읽지 못한다.</li> <li>즐거움이 \(0\) 미만이 되지 않아서 성공적으로 책을 완독했다면, 즐거움을 \(b_k\)만큼 얻는다.</li> </ol> <p>마법사가 잠들지 않고 \(N\)권의 책을 모두 완독할 수 있는지 알려주자!</p> ## 입력 <p>첫째 줄에 도서관에 있는 책의 개수인 \(N\) \((1 \leq N \leq 100\ 000)\) 이 주어진다.</p> <p>둘째 줄부터 \(N\)개의 줄에는 두 정수 \(a_i, b_i\)가 공백으로 구분되어 주어진다. \((0 \leq a_i, b_i \leq 10^9)\)</p> <p>이는 번호가 \(i\)인 책을 읽기 위해 \(a_i\)만큼의 즐거움을 소모해야 하고, 완독 시에는 \(b_i\)만큼의 즐거움을 얻는다는 뜻이다.</p> ## 출력 <p>마법사가 도서관의 모든 책을 완독할 수 있다면 <span style="color:#e74c3c;"><code>1</code></span>을, 없다면 <span style="color:#e74c3c;"><code>0</code></span>을 출력한다.</p> ## 풀이 [백준 26893번](https://projectbpm.kro.kr/read/451)과 동일한 문제이다. ``` c++ #include<bits/stdc++.h> using namespace std; typedef long long ll; struct element { ll a, b; bool operator<(const element e) const { if(a<b) { if(e.a<e.b) return a<e.a; return true; } else { if(e.a<e.b) return false; return b>e.b; } } }; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<element> v(n); for(int i=0;i<n;i++) cin >> v[i].a >> v[i].b; sort(v.begin(), v.end()); ll cur=0; for(auto e : v) { if(cur-e.a<0) { cout << 0; return 0; } cur += e.b-e.a; } cout << 1; } ```