

배열을 받아 산술평균, 중앙값, 최빈값, 범위를 구하여 출력하는 문제다.
최빈값은 주어진 배열의 범위 만큼의 배열을 새롭게 선언하여 문제를 해결하였다.
주어진 배열의 범위 : -2 ~ 8
빈도수를 입력할 배열(Freq) 선언
Freq = new int[11]
Freq[0] => -2의 빈도수
Freq[1] => 1의 빈도수
...
Freq[10] = 8의 빈도수
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
static int[] arr;
static int[] freq;
static int N;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
N = in.nextInt();
int sum = 0;
arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = in.nextInt();
sum += arr[i];
}
Arrays.sort(arr);
int min = arr[0]; // -2
int max = arr[N - 1]; // 8
int mostFreq = getFreq(arr, max - min + 1); // 최빈값
sb.append((int)Math.round((double)sum/N)).append('\n'); // 산술평균
sb.append(arr[N/2]).append('\n'); // 중앙값
sb.append(mostFreq).append('\n'); // 최빈값
sb.append(max - min); // 범위
System.out.println(sb);
}
static int getFreq(int[] arr, int nFreq) {
freq = new int[nFreq];
int max = 0;
for (int i = 0; i < N; i++) {
int idx = arr[i] - arr[0];
freq[idx]++;
if (freq[idx] > max) {
max = freq[idx];
}
}
List<Integer> duplicate = new ArrayList<>();
for (int i = 0; i < nFreq; i++) {
if (freq[i] == max) {
duplicate.add(i);
}
}
if (duplicate.size() > 1) {
return duplicate.get(1) + arr[0];
} else {
return duplicate.get(0) + arr[0];
}
}
}
'Algorithm' 카테고리의 다른 글
백준 11651번 좌표 정렬하기 2 (0) | 2023.03.17 |
---|---|
백준 12865번 평범한 배낭 (0) | 2023.03.17 |
백준 1932번 정수 삼각형 (0) | 2023.03.16 |
백준 1149번 RGB거리 (0) | 2023.03.16 |
백준 9461번 파도반수열 (0) | 2023.03.16 |
댓글