[BOJ/2109] 순회 강연, c++

2021. 4. 8. 02:18·DEV/PS

www.acmicpc.net/problem/2109

 

2109번: 순회강연

한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다.

www.acmicpc.net

한줄 후기 : 골 4 맞어?!

 

하루에 하나만 강연 할 수 있을 때 pay를 가장 많이 받을 수 있는 방법을 찾으면 된다.

처음에 우선순위 큐인걸 알고 바로 짰다가 예외 케이스를 간과해서 틀렸다.

예외 케이스는

3

10 2

10 2

3 1

 

이러면 13이 아니라 20이 답이다. 

왜냐면 2일안에 할 수 있는 강연은 1일날 해도 되니까 정답은 10+10 = 20 이다.

 

//AC
//BOJ 2109 순회강연
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> lec;

bool cmp(const lec &a, const lec &b){
	if(a.second == b.second){
			return a.first<b.first;
		}
		else{
			return a.second<b.second;
		}
}
priority_queue<int> pq;
vector<lec> day;
int main(){
	int n, p, d, ans = 0, cur = 0, idx;
	cin >> n;
	for(int i=0; i<n; i++){
		scanf("%d %d", &p, &d);
		day.push_back({p, d});
		cur = max(cur, d);
	}
	sort(day.begin(), day.end(), cmp);
	idx = n-1;
	while(cur){
		while(idx < n && day[idx].second == cur){
			pq.push(day[idx--].first);
		}
		if(!pq.empty()){
			ans += pq.top();
			pq.pop();
		}
		cur-=1;
	}
	cout << ans;
	return 0;
}

먼저 벡터에 pay, day를 받고, 이를 정렬해 주는데 day가 큰 것부터 정렬해준다.

첫 cur 가 가장 day가 큰 값이된다. 

이제 그 cur랑 day가 같은 값들은 모두 큐에 넣어준다. 그리고 큐에 있는 값들을 ans에 더해준다.

cur은 1씩 줄여 나간다.

그러면 cur이 0보다 작거나 같아질 경우 할 수 있는 모든 강연을 큐에 담은 것이고, ans에는 그 pay들의 총합이 담겨 있다.

 

 

너무 어렵다... 나도 day가 큰 것부터 정렬 하는 건 생각 했는데 그 이후가 너무 어려워서 찾아봤다.

아직 갈길이 멀다.. 그리디 어려워

저작자표시 비영리 변경금지 (새창열림)

'DEV > PS' 카테고리의 다른 글

[BOJ/2116] 주사위 쌓기, c++  (0) 2021.04.23
[BOJ/2623] 음악 프로그램, c++  (0) 2021.04.08
[BOJ/21318] 피아노 체조, c++  (0) 2021.04.05
[BOJ/20922] 겹치는 건 싫어, c++  (0) 2021.04.05
[BOJ/14938] 서강 그라운드, c++  (0) 2021.04.05
'DEV/PS' 카테고리의 다른 글
  • [BOJ/2116] 주사위 쌓기, c++
  • [BOJ/2623] 음악 프로그램, c++
  • [BOJ/21318] 피아노 체조, c++
  • [BOJ/20922] 겹치는 건 싫어, c++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (182)
      • DEV (151)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (21)
        • injection (1)
        • JS, TS (3)
        • DB (2)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    렛츠락페스티벌
    JavaScript
    Nest.js
    DFS
    DP
    Express
    앱잼
    node.js
    슬랙
    알고리즘
    db
    이분탐색
    솝트
    리액트
    일상
    mongoDB
    nodejs
    boj
    BFS
    react
    GitHub
    PS
    위상정렬
    슬랙봇
    회고
    개발
    우선순위큐
    typescript
    백준
    SOPT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
jobchae
[BOJ/2109] 순회 강연, c++
상단으로

티스토리툴바