시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
2 초 | 128 MB | 216395 | 107543 | 88461 | 49.386% |
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
예제 입력 1
3
40 80 60
예제 출력 1
75.0
예제 입력 2
3
10 20 30
예제 출력 2
66.666667
10-2 이하의 오차를 허용한다는 말은 정확히 소수 2번째 자리까지 출력하라는 뜻이 아니다.
예제 입력 3
4
1 100 100 100
예제 출력 3
75.25
예제 입력 4
5
1 2 4 8 16
예제 출력 4
38.75
예제 입력 5
2
3 10
예제 출력 5
65.0
예제 입력 6
4
10 20 0 100
예제 출력 6
32.5
예제 입력 7
1
50
예제 출력 7
100.0
예제 입력 8
9
10 20 30 40 50 60 70 80 90
예제 출력 8
55.55555555555556
풀이
CPP
#include <iostream>
using namespace std;
int main()
{
int M = 0; //과목 수
int score[1000]; // 과목 점수를 담을 배열
cin >> M;
//과목 점수 담기
for(int i = 0; i < M; i++){
cin >> score[i];
}
long HighScore = 0; // 최고점 판단
long sum = 0; // 총합
//최고점 판단 및 총합
for (int i = 0; i < M; i++){
if(score[i] > HighScore){
HighScore = score[i]; // score 배열에 담긴 값을 HighScore에 업데이트 해준다.
}
sum += score[i]; // if문을 빠져나오면 가지고 있는 socre[i]의 방에 있는 값을 sum에 더하며 저장
}
double result = sum * 100.0 / HighScore / M;
cout << result << "\\n";
return 0;
}
입력된 과목별 점수 중에서 최고점을 구하고, 평균점수를 계산하여 출력하는 C++ 코드입니다.
먼저, 사용자로부터 입력 받은 과목 수를 변수 M에 저장하고,
이후 for문을 이용해 M번 반복하여 각 과목의 점수를 score 배열에 저장합니다.
다음으로, 최고점수를 저장할 변수 HighScore와 모든 점수의 합을 저장할 변수 sum을 초기화하고,
for문을 이용하여 score 배열에서 최고점수를 찾고 모든 점수의 합을 계산합니다.
마지막으로, 계산된 평균점수를 출력합니다.
코드에서 result 변수를 선언할 때 100.0으로 나누는 이유는,
나중에 계산할 때 HighScore와 M이 모두 int형으로 선언되어 있기 때문에,
정수형으로 나누어진 결과값이 실수형으로 바뀌지 않기 때문입니다.
따라서 double형으로 계산하고자 할 때에는 적어도 하나의 변수를 실수형으로 선언해주어야 합니다.
'Programming > CodingTest' 카테고리의 다른 글
[백준]_11720번_숫자의 합 [C++] (0) | 2023.04.05 |
---|---|
[백준]_2750번_수 정렬하기 [C++] (0) | 2023.03.23 |
[백준]_10807번_개수 세기_ 쉬움[C++] (0) | 2023.03.13 |