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, 0, sizeof(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);
백준 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
머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)