백준 4344 평균은 넘겠지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <cstdio>
#include <cstring>
using namespace std;
 
int score[1000];
 
int main() {
    int c;
    scanf("%d"&c);
    while (c--) {
        memset(score, 0sizeof(score));
        int n , sum = 0;
        scanf("%d"&n);
        for (int i = 0; i < n; i++) {
            scanf("%d"&score[i]);
            sum += score[i];
        }
        double avg = (double)sum / n;
        int num = 0;
        for (int i = 0; i < n; i++)
            if (score[i] > avg)
                num += 1;
        printf("%.3f%%\n", (double)num / n * 100);
    }
    return 0;
}
 
cs




자료형에 약해 항상 피해다녔는데 이번에 풀어보았다



매 테스트케이스마다 배열 공간을 새로이 할당하는 것보다는 


0으로 초기화 시켜주는게 나을거 같아 memset()을 이용하였다.

(But, 둘 다 해본 결과 메모리 사용량이나 시간에 차이가 없다. 아마 새로이 할당하는 게 아니라 변수명으로 덮어씌우는 듯.)



핵심은


나누었을 때 소숫점이하 자리까지 얻으려면 다음과 같이 sum에 명시적 형변환을 해줘야 한다.


double avg = (double)sum / n;


그리고


소숫점 이하 셋째자리까지 출력하고 싶다면 %.3f 를 써줘야 하고 


그 뒤에 % 문자를 출력하고 싶다면 %% 를 써줘야 한다.


printf("%.3f%%\n", (double)num / n * 100);










'Algorithm' 카테고리의 다른 글

백준 1965 상자넣기  (0) 2018.05.18
백준 11051 이항 계수 2  (0) 2018.05.18
백준 9251 LCS  (0) 2018.05.18
백준 2167 2차원 배열의 합  (0) 2018.05.18
백준 2163 초콜릿 자르기  (0) 2018.05.18
더보기

댓글,

jayharvey

머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)