210이 정답입니다. 위 코드는 틀린 코드 같습니다.
그리고 코드는 코드 쓰는 칸에 써 주세요(소스 추가). 가독성도 떨어지고 제대로 된 실행을 하기 힘듭니다.
1202번 - 보석 도둑
210이 정답입니다. 위 코드는 틀린 코드 같습니다.
그리고 코드는 코드 쓰는 칸에 써 주세요(소스 추가). 가독성도 떨어지고 제대로 된 실행을 하기 힘듭니다.
검색해서 위 코드가 있는 블로그의 코드를 실행해 보니 210이 나옵니다. 아마 코드 복사 중에 오류가 생긴 것 같네요.
댓글을 작성하려면 로그인해야 합니다.
qhdud3100 2년 전
4 2
4 100
5 110
6 90
7 80
5
7
로 입력하면 210이 나와야하는거 아닌가요? (5가방에 100, 7가방에 110)
왜 190이 나와야하나요??
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int MAX = 300000;
int N, K;
int bag[MAX];
pair<int, int> jewelry[MAX];
priority_queue<int> pq; //maxHeap 사용
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 실행속도 향상
cin >> N >> K;
for (int i = 0; i < N; i++)
cin >> jewelry[i].first >> jewelry[i].second;
for (int i = 0; i < K; i++)
cin >> bag[i];
//보석(무게 기준)과 가방 오름차순 정렬
sort(jewelry, jewelry + N);
sort(bag, bag + K);
long long result = 0;
int idx = 0;
//무게제한이 낮은 가방부터 최대한 비싼 보석을 넣는 방법 for (int i = 0; i < K; i++){ cout << "i :" << i << "\n"; //i 번째 가방의 무게제한에 충족하는 보석 다 넣음 while (idx < N && jewelry[idx].first <= bag[i]){ pq.push(jewelry[idx++].second); cout << jewelry[idx++].first << "\n"; }
//pq의 루트에는 현재 기준 제일 비싼 보석이 들어있음 if (!pq.empty()){ result += pq.top(); pq.pop(); }
}
cout << result << "\n";
return 0;
}
답안 코드가 이런식으로 나오긴하는데 (인터넷에서 참고했습니다.)
저 input을 넣으면 190이 나오는데 (5가방에 110짜리 넣고 7가방에 80짜리 넣는 것 같습니다. )
왜 190이 나와야하는지 모르겠네요ㅠㅠ 알려주시면 감사하겠습니다.