Problem Solving/BOJ

[백준 / BOJ] C++ 29767 점수를 최대로

nageune 2023. 9. 13. 22:13
728x90
반응형

29767번: 점수를 최대로

 

문제

https://www.acmicpc.net/problem/29767

 

29767번: 점수를 최대로

단대소프트고에는 교실 $N$개가 있다. 교실은 $1$번부터 $N$번까지 $1, 2, \ldots, N$ 순서로 연달아 있다. 학교 밖에는 $K$명의 학생들이 있다. $K$명의 학생은 학교에 들어가기 전 학생마다 목적지 교실

www.acmicpc.net

 

 

풀이

목적지 i번 교실에 도착하면 1~i번 방의 점수를 얻습니다. 즉, 누적합 배열로 i번 교실을 목표로 했을 시 얻는 점수를 저장합니다. K명의 학생들은 서로 다른 목적지를 가지므로 누적합 배열을 내림차순 정렬하고 앞에서부터 K개 원소의 합을 출력하면 됩니다.

 

코드

#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ll n, k, ans = 0;
  cin >> n >> k;
  vector<ll> a(n + 1, 0);
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    a[i] += a[i - 1];
  }
  sort(a.begin(), a.end(), greater<>());
  for (int i = 0; i < k; i++)
    ans += a[i];
  cout << ans;
  return 0;
}

 

728x90
반응형