작성일 :

문제 링크

34845번 - 강의평

설명

N개의 강의평 점수가 주어질 때, 100점짜리 평가를 최소 몇 개 추가해야 평균이 X 이상이 되는지 구하는 문제입니다.


접근법

현재 점수 합을 sum, 추가할 100점 개수를 k라 하면 평균 조건은 (sum + 100k) / (N + k) ≥ X 입니다. 이를 정리하면 (100 - X)k ≥ XN - sum 이 됩니다.

오른쪽 값이 0 이하이면 이미 조건을 만족하므로 0을 출력합니다. 그렇지 않으면 올림 나눗셈으로 최소 k를 계산합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Linq;

class Program {
  static void Main() {
    var first = Console.ReadLine()!.Split().Select(long.Parse).ToArray();
    long n = first[0], x = first[1];
    var a = Console.ReadLine()!.Split().Select(long.Parse);
    long sum = 0;
    foreach (var v in a) sum += v;

    long rhs = x * n - sum;
    if (rhs <= 0) {
      Console.WriteLine(0);
      return;
    }
    long denom = 100 - x;
    long k = (rhs + denom - 1) / denom;
    Console.WriteLine(k);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  ll n, x; cin >> n >> x;

  ll sum = 0, v;
  for (int i = 0; i < n; i++) {
    cin >> v;
    sum += v;
  }

  ll rhs = x * n - sum;
  if (rhs <= 0) {
    cout << 0 << "\n";
    return 0;
  }

  ll denom = 100 - x;
  ll k = (rhs + denom - 1) / denom;
  cout << k << "\n";

  return 0;
}

Tags: 34845, BOJ, C#, C++, 구현, 백준, 수학, 알고리즘

Categories: ,