티스토리 뷰

PS 이야기/PS - BOJ

[BOJ] 1546번 - 평균

whatisyourname 2022. 4. 1. 23:47
반응형

 

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

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.


1. 어떻게 풀까?

1-1) 문제의 요구사항을 그대로 따르자.

문제에서 먼저 최댓값인 M을 고르고, 모든 점수를 (점수)/M*100으로 고쳤다고 하였으니 먼저 입력으로 모든 점수를 받은 다음 배열에 저장한다. 입력을 N개 받으며 미리 최고점수를 갱신하고, 점수의 합을 저장한다.

(점수의 합)/M*100 이 고친 점수의 합과 같으므로 고친 점수의 평균은 고친 점수의 합에 N을 나눠준 값이다. 이 경우, 소수 출력이 필요하므로 점수의 합을 미리 double형으로 변환을 해주었다.

이후 소수점 출력을 10-2 미만으로 설정한 다음, 출력하면 맞았습니다! 를 받을 수 있다.

2) 최종 코드

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
#include <bits/stdc++.h>
using namespace std;
 
int nums[1001];
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int N; cin >> N;
    int sum = 0int max_num = 0;
    double ans = 0;
    
    for (int i = 0; i < N; i++) {
        cin >> nums[i];
        max_num = max(nums[i], max_num);
        sum += nums[i];
    }
 
    ans = ((double)sum / max_num * 100/ N;
    cout << fixed; cout.precision(5);
    cout << ans;
 
    return 0;
}
cs

 

2. FAQ

Q1) 먼저 (점수/M*100)을 한 다음 합을 구하고 평균을 구해도 상관없지 않나요?

A) 가능은 하다. 다만 문제의 조건이 조금 더 엄격하게 주어지면 틀릴 수 있다.

    이 경우 소수점으로 인한 오차가 발생할 수 있기에, 실수형 연산은 피할 수 있으면 최대한 피하는 것이 좋다.

    컴퓨터는 소수점에 취약하다.

반응형

'PS 이야기 > PS - BOJ' 카테고리의 다른 글

[BOJ] 2439번 - 별 찍기-2  (0) 2022.04.02
[BOJ] 2438번 - 별 찍기 - 1  (0) 2022.04.02
[BOJ] 1330번 - 두 수 비교하기  (0) 2022.04.01
[BOJ] 1157번 - 단어 공부  (0) 2022.04.01
[BOJ] 1152번 - 단어의 개수  (0) 2022.03.31
댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
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 30 31
글 보관함