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이 나와야하는지 모르겠네요ㅠㅠ 알려주시면 감사하겠습니다. 

0000000000   2년 전

210이 정답입니다. 위 코드는 틀린 코드 같습니다.

그리고 코드는 코드 쓰는 칸에 써 주세요(소스 추가). 가독성도 떨어지고 제대로 된 실행을 하기 힘듭니다.

qhdud3100   2년 전

네에 감사합니다 ㅎㅎ

근데 정답 통과 되지 않나요? 

구글링 해보니까 다 저런방식으로 풀었던데

0000000000   2년 전

검색해서 위 코드가 있는 블로그의 코드를 실행해 보니 210이 나옵니다. 아마 코드 복사 중에 오류가 생긴 것 같네요.

qhdud3100   2년 전

엇 글쿤요... 그런 실수를...ㅠ

감사합니다ㅎㅎ

댓글을 작성하려면 로그인해야 합니다.