본문으로 바로가기
2월1일에 다리가 부러진 후... 이제 겨우 8주가 지났네요. 16주 진단이니까... 아직 8주가 더 남았습니다.ㅠㅠ 단지 다리하나가 더 부러졌을 뿐인데도 많은 부분이 불편하네요..ㅠㅠ 특히 그 좋아하는 블로그 활동도 못하고, 아름다운 알콜 습취도 못하네요...ㅠㅠ

그러다 문득, 한가지 떠로는 생각이 있어서, 배열없이 평균을 구하는 것에 대해 이야기를 할까합니다.^^ 보통 C/C++를 공부하다보면 배열을 배우는 단계에서 배열의 합과 평균을 구하는 예제를 통해 배열을 배우게 되는데요. 이번엔 배열을 구하지 않고 평균을 구하는 예제를 다뤄볼까 합니다.

먼저 평균을 구하기 위해 입력되는 n 번째 숫자를

 
이라고 하구요. n 번째까지의 평균을


이라고 하죠.

그러면, 평균은 다들 아는데로


n번째까지의 합에서 갯수를 나누게 됩니다. 이 식을 살짝 변형하면


n번째 숫자와 (n-1)번째까지의 합과의 합에서 전체 개수(n)를 나누게 되죠 이때... (n-1)번째까지의 합이라는 것은


이렇게 다시 (n-1)번째까지의 평균에 (n-1)을 곱해도 됩니다. 이제 n번째까지의 평균은


이렇게, 이전 평균에 (n-1)을 곱하고, 현재 숫자를 더해서 n으로 나누면 된다는 것을 알 수 있죠. 이 마지막 수식을 C로 바꾸면 되겠네요^^


음... //calculate sum and average 라고 주석을 친 부분을 보면

sum += inputNum 

은 누적해서 입력한 숫자를 저장하고, 그 다음 식이 결론이죠. 좌변의 변수는 C 문법상 항상 이전 값이니까

average = ( (n-1)*average + inputNum )/n;

이거면 끝인거죠. 나머진 출력하는 부분과 입력받는 부분이니까요. 이렇게 꾸민 결과를 확인해보면


입력을 가할때마다, 평균값을 계산해 주고 있다는 것을 확인할 수 있습니다.^^



댓글을 달아 주세요

  1. BlogIcon 핑구야 날자 2011.03.26 08:01 신고

    요건 예전에 터보C를 해봐서 이해가 됩니다.. 이런날도 다있네요 ㅋㅋ

  2. BlogIcon 구차니 2011.03.27 15:41 신고

    음.. 그나저나 4달을 제대로 운동도 못하시면
    다른쪽 다리도 근력이 약해서 완전 100% 회복되는데는 적어도 반년은 소요되실것 같네요 ㅠ.ㅠ

    음.. 대개는 sum과 count를 가지고 avg만 계산해서 출력했었는데
    위와 같은 방법으로 하면 나중에는 오차가 좀 생기지 않을까 걱정이 되네요.

    • BlogIcon PinkWink 2011.03.27 17:30 신고

      그러게요. 걷는법도 잊어버릴것 같습니다. 그나저나 이번 포스팅은 이상하네요 ㅋㅋㅋ 제목은 배열없이가 아니라 현재의 합을 모른상태에서라고 해야할듯 하네요 푸하하. 이런 창피 ㅠㅠ 뭐 부족하지만 뭐 그냥 이런것도 있지않을까하는 소심한 의견이라고 해두죠 뭐 ㅋㅋ

  3. 숭사리 2011.03.28 02:09 신고

    사실 지금껏 몇개의 샘플(n개)로 평균(m)을 구하였으니 현재까지의 합(n*m)도 아는것이죠.
    이것보다 조금더 복잡하긴 하지만, 이런식으로 분산도 구할수 있답니다 ^^

    • BlogIcon PinkWink 2011.03.28 09:58 신고

      그렇죠^^... 문득 든 생각을 그저 포스팅했는데.. 이번 포스팅은 해놓고 보니 별로 마음에 안들어요...ㅠㅠ 그리고 분산도 생각해보니 말씀하신데로 가능하겠는걸요.. ㅎㅎ