정리

백준 2109번: 순회강연 본문

Programming/백준 BOJ

백준 2109번: 순회강연

H.J.Park 2020. 9. 30. 06:17

백준 2109번: 순회강연

 

2109번: 순회강연

문제 한 저명한 학자에게 n(0≤n≤10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1≤d≤10,000)일 안에 와서 강연을 해 주면 p(1≤p≤10,000)만큼의 강연료를 지불하겠다고 알려왔다. 각 대학에서 제시하는 d와 p값은 서로 다를 수도 있다. 이 학자는 이를 바탕으로, 가장 많은 돈을 벌 수 있도록 순회강연을 하려 한다. 강연의 특성상, 이 학자는 하루에 최대 한 곳에서만 강연을 할 수 있다.

www.acmicpc.net

 

 

- 정렬과 그리디 알고리즘을 활용하는 문제이다.

 

- 2차원 배열, 정렬, 우선순위 큐를 통해 아래로 같은 방법 같이 문제를 해결할 수 있다.

  • 먼저 a[N][2], 2차열 배열을 만든 후에 입력을 받는다.
  • a배열을 2번째 element가 오름차순이 되도록 정렬한다.
  • 정렬을 마치면 위의 그림과 같이 될 것이다.
  • PriorityQueue에 a[i][0]의 값을 계속해서 add() 해 준다. 만약 a[i][1]의 값이 PriorityQueue의 크기보다 작으면 PriorityQueue의 크기가 a[i][1]와 같아질 때까지 remove()을 통해 제일 작은 값들을 삭제한다.
  • PriorityQueue에 있는 모든 값들을 더하면 답이 된다.

 

- 예제로

4 // N
5 3
1 2
4 3
4 1

의 데이터를 보자.

- 이 데이터에서는 1, 3, 4번째 강의를 가야지 돈을 최대로 벌 수 있다.

  • 위 데이터를 정렬하면 아래와 같이 될 것이다.

  • 순서대로 a[i][0]의 값들을 우선순위 큐에 add()하면 된다. 그러면 우선순위 큐에는 1, 4, 4, 5 값들이 저장되어 있을 것이다. a[3][1] 의 값은 3이나 우선순위 큐의 크기는 4이므로 가장 작은 1이 remove된다. 따라서 우선순위 큐에는 4, 4, 5 값이 저장되고 이를 모두 더하면 답이 된다.
  • 이처럼 a[i][1]의 값보다 우선순위 큐의 크기가 크다면 서로 값이 같아질 때까지 우선순위 큐에 있는 값을 하나씩 remove하면 최종적으로 벌 수 있는 최댓값이 나오게 된다.

 

 

- 이 문제와 유사한 문제로는 백준 1781번: 컵라면 문제가 있다. 굉장히 유사한 문제이니 이러한 종류의 문제풀이를 연습하고 있었다면 위 문제도 꼭 풀어보면 좋을 것이라 생각한다.

 

1781번: 순회공연

상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라인을 정하였다.

www.acmicpc.net

'Programming > 백준 BOJ' 카테고리의 다른 글

백준 2493번: 탑  (0) 2020.10.12
백준 14488번: 준오는 급식충이야!!  (0) 2020.09.30
백준 1461번: 도서관  (0) 2020.09.28
백준 2473번: 세 용액  (0) 2020.09.21
백준 2470번: 두 용액  (0) 2020.09.08
Comments