koi 문제 중 2592 대표값를 풀어보자

2592 대표값

위 문제는 koi 문제 중 초등부 예선에 있는 문제로 평균값과 최빈값을 구하는 문제이다.

현재 업무에서 C++을 언어를 주 언어로 하다보니, C++로 모든 것을 연습하고자한다. 따라서 이번 문제도 C++를 보고 풀었으나, 다른 사람들이 푼 소스코드를 보거나, 지식이 부족한 부분에 대해 추가적으로 정리하고자 한다.

문제

대표값 문제는 초등부 문제로 다소 쉽게 풀 수 있는 문제이다. 자신감을 찾기 위한 문제이기도 하다.

1000보다 작은 작은 10의 배수 10개를 입력받아 평균과 최빈값을 출력해라. 가장 많이 입력받은 값을 출력할 때 동일할 경우 가장 먼저 나온 값 혹은 가장 나중에 나온 값을 출력하면 된다. 따라서, 스폐셜 저지로 문제가 지정되어져있다.

문제 풀이

해당 문제는 단순하게 평균과 최빈값을 출력하면된다.

#include <iostream>

using namespace std;

int main()
{
  int av = 0, arr[1001] = {0,}, checker = 0, ans;

  for (int i = 0; i < 10; i++) {
    int tmp;
    cin >> tmp;

    arr[tmp]++;
    av += tmp;
  }

  for (int i = 10; i < 1001; i+=10) {
    if(arr[i] && checker < arr[i]) {
      checker = arr[i];
      ans = i;
    }
  }

  cout << av/10 << endl << ans << endl;
}

위의코드는 대표값 2 에서 본 인사이트를 풀이를 이용해 풀었다.

여기서 중요할 팁이라고 한다면, for문에서 i값을 증가시키는 부분을 보자. 10의 배수만 입력되기 때문에 “10의 배수만 체크하면 된다.”

  for (int i = 10; i < 1001; i+=10) {
    if(arr[i] && checker < arr[i]) {
      checker = arr[i];
      ans = i;
    }
  }

여기서도 배열을 초기화하는 것을 잊지말자!