<문제>https://www.acmicpc.net/problem/1546
<정답 코드>
#include<stdio.h>
int main(void) {
int score[1000];
int num;
int max = 1;
double newscore[1000];
double sum = 0;
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
scanf("%d", &score[i]);
if (max < score[i])
max = score[i];
}
for (int j = 0; j < num; j++) {
newscore[j] = (double)score[j] / (double)max * 100;
sum += newscore[j];
}
printf("%.2lf", sum / num);
return 0;
}
(double) score [j] / (double) max * 100; 의 코드는 아래와 같이 작성하여도 된다.
(double) score [j]/max*100;으로 적어도 형 변환이 된다.
max값을 구하려고 이문제에서 점수 값이 가질 수 있는 가장 작은 수인 1을 max값의 초기값으로 설정하였고 이보다 더 큰 수를 찾는 방식으로 max값을 구해주었다.
<절대 오차 상대오차>
마지막 출력에서. 2lf로 출력을 하면 정답이겠구나를 알았는데, 그냥 lf로 코드를 작성하여도 정답이 된다.
lf로 출력을 요청하면 소수점 아래 기본 6자리로 출력 결과가 나타나기 때문이다.
. 1lf ,. 3lf로 출력을 해도 모두 정답처리가 된다. 이와 유사한1008번 문제는 10^-9 이하의 오차범위 이하이면 정답인데,
10^-10과 같이 오차범위가 증가하면 정답으로 인정되지만, 10^-8(. 8lf)은 오답처리가 된다. 이 부분은 1546번도 동일한 조건이라 생각하는데,. 1lf가 정답처리가 되는 이유는 나의 기준에서는 조금 의아한 것 같다. 문제를 푸는 데에 지장이 있는 것은 아니지만, 위와 같은 생각이 들었으니 조금 더 생각해 봐야겠다.
<백준 1008번>
https://www.acmicpc.net/problem/1008
https://keep-going99.tistory.com/84