백준 4344번 (c언어)
이전 코드
#include <stdio.h>
int main() {
int C = 0; // 테스트 케이스 갯수
int N = 0; // 학생의 수
int score[1000] = { 0 }; // 점수
int sum = 0;
int everage = 0;
int cnt = 0; // 평균보다 점수 높은애들 수 세는 변수
scanf("%d", &C);
for (int i = 0; i < C; i++) {
scanf("%d", &N);
for (int j = 0; j < N; j++) {
scanf("%d", score[i]);
sum += score[i];
}
// 1. 평균을 때린다.
everage = sum / N;
// 2. 평균보다 점수가 높은 애들 퍼센트를 낸다.
for (int j = 0; j < N; j++) {
if (everage < score[i]) {
cnt++;
}
}
printf("%d", cnt / N);
}
}
수정이 필요한 부분
-
변수 위치
우선 score와 sum 변수는 C(테스트 갯수)만큼 돌리는 for문 안에 넣어야 했다.
다른 학생의 점수를 넣을 때마다 0으로 초기화 필요 -
배열 인덱스 사용
이건 하지 말아야 할 실수인데 socre배열 인덱스를 for문으로 돌려서 sum에 더하는 코드에 N(학생수)에 관한 인덱스를 넣어야 했는데 C(테스트 갯수)에 관한 인덱스를 넣었다. -
자료타입, 형변환
계속해서 문제가 되고 있는 부분이다 사실상 다른 문제는 바로 결과값을 보면서 수정할 수 있지만 이 부분은 공부가 덜 되어있는 부분이다.
int everage = 0; => double everage = 0.00;
everage = sum / N; => everage = (double)sum / N;
printf("%d", cnt / N); => printf("%.3f%%\n", (double)cnt * 100 / N);
수정 코드
#include <stdio.h>
int main() {
int C = 0; // 테스트 케이스 갯수
int N = 0; // 학생의 수
scanf("%d", &C);
for (int i = 0; i < C; i++) {
scanf("%d", &N);
int sum = 0;
int score[1000] = { 0 }; // 점수
double everage = 0.00;
for (int j = 0; j < N; j++) {
scanf("%d", &score[j]);
sum += score[j];
}
// 1. 평균을 때린다.
everage = (double)sum / N;
// 2. 평균보다 점수가 높은 애들 퍼센트를 낸다.
int cnt = 0; // 평균보다 점수 높은애들 수 세는 변수
for (int j = 0; j < N; j++) {
if (everage < score[j]) {
cnt++;
}
}
printf("%.3f%%\n", (double)cnt * 100 / N);
}
return 0;
}
출처 : https://www.acmicpc.net/problem/4344
Author And Source
이 문제에 관하여(백준 4344번 (c언어)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dogit/백준-4344번-c언어저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)