본문 바로가기
알고리즘 문제풀이

[Backjoon] 2592번 문제 - 대표값

by 마스터누누 2017. 5. 27.
728x90
반응형

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50의 평균은

이 된다.

평균 이외의 또 다른 대표값으로 최빈값이라는 것이 있다. 최빈값은 주어진 수들 가운데 가장 많이 나타나는 수이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50 이 주어질 경우,

30 이 세 번,

40 과 60 이 각각 두 번,

10, 20, 50 이 각각 한 번씩 나오므로, 최빈값은 30 이 된다.

열 개의 자연수가 주어질 때 이들의 평균과 최빈값을 구하는 프로그램을 작성하시오.


풀이

빈도수를 가지는 배열을 배열을 만들어

해당 인덱스 값이 들어올때마다 증가시켜주며

마지막으로 빈도수 배열을 순회하며 가장 큰값의 인덱스를 출력하면 최빈값이 나온다.


아래의 코드 처럼 배열을 쓸데 없이 크게 하지 않고 공간복잡도를 줄일수도 있다.

그 코드는 개인적으로 생각해보자

 

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
import java.util.Arrays;
import java.util.Scanner;
 
/**
 * Created by homr on 2017. 5. 27..
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[10];
        int[] arrFrequency = new int[1001];
        Arrays.fill(arrFrequency,0);
 
        int max = 0;
        int result = 0;
        int avr = 0;
 
 
        for(int i =0; i<arr.length; i++){
            arr[i] = sc.nextInt();
            arrFrequency[arr[i]]++;
            avr += arr[i];
        }
 
        Arrays.sort(arr);
 
        for(int i =0; i<arrFrequency.length; i++){
            if((arrFrequency[i]!=0)&&(max<arrFrequency[i])){
                max = arrFrequency[i];
                result = i;
            }
        }
 
        System.out.println(avr/10);
        System.out.println(result);
 
    }
}
cs



반응형

댓글