티스토리 뷰
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 = 0; int 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
- equal
- bomblab
- Network
- 구현
- docker
- Python
- 사칙연산
- 알고리즘
- Proactor
- MIN
- 함수
- 문자열
- 제어문
- react
- C++
- CSAPP
- JS
- 프로그래밍
- C
- 헤더
- Max
- BOJ
- 시간복잡도
- BRONZE
- 수학
- GDSC
- for
- 백준
- effective async
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |