백준 4344번 (c언어)

dogit·2021년 7월 12일
0

백준문제

목록 보기
1/67

이전 코드

#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);
	}
}

수정이 필요한 부분

  1. 변수 위치
    우선 score와 sum 변수는 C(테스트 갯수)만큼 돌리는 for문 안에 넣어야 했다.
    다른 학생의 점수를 넣을 때마다 0으로 초기화 필요

  2. 배열 인덱스 사용
    이건 하지 말아야 할 실수인데 socre배열 인덱스를 for문으로 돌려서 sum에 더하는 코드에 N(학생수)에 관한 인덱스를 넣어야 했는데 C(테스트 갯수)에 관한 인덱스를 넣었다.

  3. 자료타입, 형변환
    계속해서 문제가 되고 있는 부분이다 사실상 다른 문제는 바로 결과값을 보면서 수정할 수 있지만 이 부분은 공부가 덜 되어있는 부분이다.
    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

profile
느리더라도 꾸준하게

0개의 댓글