DY N DY
문제은행 합과 평균 표준편차(C++) 본문
1004 : 합과 평균 표준편차
제한시간: 1Sec 메모리제한: 32mb
해결횟수: 309회 시도횟수: 2289회
도시락 집 회계 담당을 하는 철기는 손님들이 드시는 음식의 가격들을 집계하여 매일 이들의 합산 가격과 평균 도시락 가격과 표준 편차를 구해야 하는 임무를 가지고 있다. 매일 업무 종료 때마다 이를 구해야하는 철기군 처음에는 직접 계산하다가 매일 바뀌는 도시락 수와 가격에 복잡함을 느껴 이를 프로그램으로 만들려고 한다.
평균 및 표준편차는 반올림해서 소수점 첫째 자리까지 구한다. 표준 편차의 공식은 도시락 각각의 가격을 Xi라고 하고 평균을 M이라고 한다면 다음과 같다.
표준편차란 자료의 분산 정도를 나타내는 수치로 분산의 양의 제곱근으로 표준 편차가 작은 것은 평균값 주위의 분산의 정도가 작은 것을 나타낸다.
[Copy]3 1500 2000 2500 | [Copy]6000 2000 408.2 |
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | /************************************************************** Problem: 1004 User: a132034 Language: C++ Result: Success Time:0 ms Memory:1764 kb ****************************************************************/ #include <iostream> #include <math.h> using namespace std; int main() { int n; int * ary; cin >> n; ary = new int [n]; for ( int i = 0; i < n; ++i) cin >> ary[i]; int sum = 0; double avg = 0; double dev = 0; for ( int i = 0; i < n; ++i) sum += ary[i]; avg = sum / ( double )n; avg += 0.05; for ( int i = 0; i < n; ++i) { dev += (avg - ary[i]) * (avg - ary[i]); } dev /= ( double )n; dev = sqrt (dev); dev += 0.05; printf ( "%d\n" , sum); if ( int (avg * 10) % 10 == 0) printf ( "%.lf\n" , avg); else printf ( "%.1lf\n" , avg-0.05); if ( int (dev * 10) % 10 == 0) printf ( "%.lf\n" , dev); else printf ( "%.1lf\n" , dev - 0.05); return 0; } |
다른건 크게 어렵지 않은데 소수점이하 첫째자리가 0일 경우 출력하지 않는 방법을 고민하는데 시간이 조금 걸림.
string으로 바꿔서 .이하의 부분이 .0이면 날려버리는 방법도 생각해 봤으나.. 더 간단하게 처리하려고 고민해보니
0.05를 더해서 10을 곱했다가 10을 나누어본 나머지가 0이라면 소수점이하 자리가 1이 되지 않는다(0이다)는 것이므로 없이 출력.
나머지가 0보다 크다면 소수점 이하 첫째자리를 출력하면 된다.
ex) 2000.03의 경우 -> 2000.03 + 0.05 = 2000.08 >> *10 %10 >> 20000.8%10 = 0 >> 이 경우 소수점 첫째자리가 0
2000.06의 경우 -> 2000.06 + 0.05 = 2000.11 >> *10 %10 >> 20001.1%10 = 1 >> 이 경우 소수점 첫째자리가 0이 아님.
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 문자삼각형2(C++) (0) | 2016.04.17 |
---|---|
실력키우기 곱셈(JAVA) (0) | 2016.04.14 |
문제은행 강아지와 병아리(C++) (0) | 2016.04.13 |
문제은행 두 정수 더하기(A+B)(C++) (0) | 2016.04.13 |
실력키우기 대각선 지그재그(JAVA) (0) | 2016.04.12 |