반응형
https://www.acmicpc.net/problem/2108
자바라는 언어에 대해서 화가나는 문제가 아닐까 싶다.
파이썬이었다면 큰 어려움 없이 순식간에 풀었을텐데 자바로 하니 오래 걸렸다. 특히 최빈값을 추출하는데 이렇게 복잡한 코드가 필요한지 상상도 하지 못했다.
하지만 이 문제를 풀지 않고 코딩테스트에서 최빈값 추출을 해야했다면 상당히 당황했을 것 같다.
잘 한 부분
stream을 적절히 활용했다.
부족한 부분
최빈값 부분에서 파이썬처럼 맵으로 카운트하고 정렬하려고 하니 value값으로 map을 정렬하기 어려웠다. 그래서 최빈값 추출은 구글링으로 코드를 보고 내가 이해하기 쉽게 작성했다.
package backjon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
System.out.println(Math.round(Arrays.stream(arr).average().orElse(0)));
System.out.println(arr[N/2]);
for (int i = 0; i < arr.length; i++) {
if(map.containsKey(arr[i])) map.replace(arr[i], map.get(arr[i])+1);
else map.put(arr[i], 1);
}
List<Map.Entry<Integer, Integer>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, (e1, e2) -> e1.getValue() == e2.getValue() ? e1.getKey() - e2.getKey() : e2.getValue() - e1.getValue());
if(N == 1) System.out.println(list.get(0).getKey()); //최빈값
else System.out.println(list.get(0).getValue() == list.get(1).getValue() ? list.get(1).getKey() : list.get(0).getKey());
System.out.println(Arrays.stream(arr).max().getAsInt() - Arrays.stream(arr).min().getAsInt()); //최대값 최소값 차이
}
}
반응형
'알고리즘' 카테고리의 다른 글
백준 2470 자바 드래곤 커브 (0) | 2022.03.09 |
---|---|
백준 18870 자바 (0) | 2022.03.09 |
백준 1436 자바 (0) | 2022.03.07 |
백준 2470 자바 (0) | 2022.03.07 |
백준 1018 체스판 다시 칠하기 (0) | 2022.03.07 |