https://www.acmicpc.net/problem/2108
1. 아이디어
산술평균은 Math.round 메서드로 반올림을 하는 방식으로, 중앙값은 정렬을 활용해서, 최빈값은 카운팅 배열로, 범위는 정렬을 활용해서 구할 수 있다.
2. 문제풀이
입력 단계에서 수들을 배열로 입력받으면서 합과 카운팅 배열을 작성했다. 이후 배열을 정렬해서 중앙값과 범위를 구하고 합으로 산술평균을 구하고, 카운팅 배열로 최빈값을 찾는 방식으로 구현했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
private static final int MAX = 4000;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int sum = 0;
int[] arr = new int[N];
int[] cntArr = new int[MAX + 1 + MAX];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
cntArr[MAX + arr[i]]++;
}
Arrays.sort(arr);
int max = 0;
int cnt = 0;
for (int i = 0; i < cntArr.length; i++) {
if (cntArr[i] > max) {
max = cntArr[i];
cnt = 1;
} else if (cntArr[i] == max) {
cnt++;
}
}
cnt = Math.min(cnt, 2);
int mode = 0;
for (int i = 0; i < cntArr.length; i++) {
if (cntArr[i] == max) cnt--;
if (cnt == 0) {
mode = i - MAX;
break;
}
}
sb
.append(Math.round((double) sum / N)).append("\n")
.append(arr[N / 2]).append("\n")
.append(mode).append("\n")
.append(arr[N - 1] - arr[0]).append("\n");
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 20922번 - 겹치는 건 싫어 [Java] (0) | 2025.02.19 |
---|---|
[백준] 21610번 - 마법사 상어와 비바라기 [Java] (0) | 2025.02.19 |
[백준] 31610번 - 飴の袋詰め (Drops Packing) [Java] (0) | 2025.02.19 |
[백준] 2257번 - 화학식량 [Java] (0) | 2025.02.18 |
[백준] 8979번 - 올림픽 [Java] (0) | 2025.02.18 |