https://www.acmicpc.net/problem/2108
[정답]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i]=Integer.parseInt(br.readLine());
}
long result1=Math.round((float) Arrays.stream(arr).sum() /arr.length);
System.out.println(result1);
Arrays.sort(arr);
int result2=arr[n/2];
System.out.println(result2);
HashMap<Integer, Integer> map = new HashMap<>();
int maxcount=0;
for(int i = 0; i < n; i++){
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
maxcount=Collections.max(map.values());
ArrayList<Integer> result3=new ArrayList<>();
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
if(entry.getValue()==maxcount){
result3.add(entry.getKey());
}
}
Collections.sort(result3);
if(result3.size()>=2){
System.out.println(result3.get(1));
}
else{
System.out.println(result3.get(0));
}
int result4=Arrays.stream(arr).max().getAsInt()-Arrays.stream(arr).min().getAsInt();
System.out.println(result4);
}
}
[풀이]
1. 산술평균의 경우 배열의 합에서 / 배열의 길이
-> Arrays.stream(arr).sum() 스트림 함수 사용
-> 반올림을 위해 Math.round를 통해 소수 첫째자리 반올림 -> long값으로 반환
2. 중앙값
증가하는 순서대로 나열 -> Arrays.sort()
개수가 홀수개이므로 n/2 인덱스의 값
3. 최빈값
가장 어려움을 겪었는데
key: value = 배열의 값, 빈도 수 저장하기 위해 HashMap을 사용
최빈값이 여러개 나올 수 있으므로 ArrayList를 사용 ( 원래 일반 배열을 사용했는데 배열의 길이를 선언하고 해야해서 0값이 들어가서 변경,,)
1. for문을 사용하여 map에 배열값과 빈도수를 저장
for(int i = 0; i < n; i++){
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
2. for문을 돌면서 maxcount( 가장 높은 빈도수)와 같으면 최빈값 배열에 저장
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
if(entry.getValue()==maxcount){
result3.add(entry.getKey());
}
}
3. 최빈값 배열의 값을 정렬 => 만약 여러 개일 경우 최빈값 중 두번째를 출력하기 위해
Collections.sort(result3);
4. 최빈값이 2개 이상이면 2번째 값 출력, 아니면 첫번째 값 출력
if(result3.size()>=2){
System.out.println(result3.get(1));
}
else{
System.out.println(result3.get(0));
}
4. 범위
최대값에서 최소값을 빼야 하기 때문에
stream 함수를 사용하여 빼기 진행하여 계산
'Baekjoon' 카테고리의 다른 글
[백준] 1309 동물원 [JAVA] (0) | 2025.07.02 |
---|---|
[백준] 15655- N과 M (6) [JAVA] (0) | 2025.06.20 |
[백준] 1966- 프린터큐 [JAVA] (0) | 2025.06.19 |
[백준] 10866- 덱 [JAVA] (0) | 2025.06.19 |
[백준] 11866- 요세푸스 문제 0 [JAVA] (0) | 2025.06.18 |