반응형
https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int c,s= 0;
scanf("%d", &c);
for (int i = 0; i < c; i++) {
int sum = 0;
int count = 0;
scanf("%d", &s);
int* score = (int*)malloc(sizeof(int) * s);
for (int i = 0; i < s; i++) {
scanf("%d", &score[i]);
sum += score[i];
}
double ave = sum / s;
for (int i = 0; i < s; i++) {
if (score[i] > ave) {count++;}
}
double patio = ((double)count * 100 / s);
printf("%.3lf%%\n",patio);
}
return 0;
}
☞ 풀이 전
단순한 연산들이 반복되어 나오는 문제라고 해석했었습니다. 예제 입력 부분에서 학생의 수와 학생의 점수가 같은 줄에 위치해있어 처음에 약간 당황하였으나 개행문자와 scanf함수의 관계를 다시 생각하니 당황할게 없었고, 테스트의 개수 c를 입력받고 c만큼 반복시키는 가운데 학생 수 s를 입력받아 학생의 점수를 일차원 배열을 s의 크기로 동적할당하여 넣은 뒤 계산해주려 했습니다.
☞ 풀이 후
배열의 크기를 1000같이 큰 수로 선언할 수도 있었지만 동적할당하는게 마음이 편했습니다. 연산식 구성은 기본적인 것들로 구성되어있어서 어려운 것이 없었지만 C언어 개념배울 때 잠깐 스쳐지나갔던 %%표현에 주의했어야 했고,patio double 변수의 소수점 세자리가 계속 0으로 나와 고민해보니 s와 count는 정수여서 정수계산으로 나눗셈이되어 형변환이 필수였습니다.
☞다른 사람의 풀이
#include <stdio.h>
int main(void){
int N;
scanf("%d\n", &N);
for(int i=0; i<N; i++){
int students;
scanf("%d\n", &students);
int scores[students];
int sum = 0;
for(int j=0; j<students; j++){
scanf("%d", &scores[j]);
sum = sum+scores[j];
}
float average = (double) sum/students;
//printf("%f\n", average);
int counter = 0;
for(int k=0; k<students; k++){
if(scores[k]>average){
counter++;
}
}
printf("%.3f%%\n", ((double) counter/students)*100); // '%'출력을 위해 '%%'
}
}
출처 : https://loding.tistory.com/39
데이터 낭비를 최소화 하기 위해 average의 자료형을 float형으로 선언해준 것,배열의 크기를 처음부터 변수로 설정한 것 외에 다른 것은 없었습니다.
반응형
'Baekjoon' 카테고리의 다른 글
[C] 백준 4673번 : 셀프 넘버 (0) | 2023.01.07 |
---|---|
[C]백준 15596번 : 정수 N개의 합 (0) | 2023.01.05 |
[C] 백준 8958번 : OX퀴즈 (1) | 2022.09.08 |
[C] 백준 1546번 : 평균 (0) | 2022.08.16 |
[C] 백준 3052번 : 나머지 (0) | 2022.08.16 |