[Java] Boj 2108: 통계학

2025. 7. 25. 18:55·PS/Solve

문제

https://www.acmicpc.net/problem/2108

 

풀이

 한창 PS를 시작할때 쉬워보여 도전했다가 한 부분에서 두드려맞고 포기했던 문제인데, 프린터 큐 문제와 함께 클래스 2에 남아있길래 한번 도전해보았다. 문제는 입력받는 값들에 대해 산술평균, 중앙값, 최빈값, 범위를 출력하는 것으로, 최빈값이 여러개 있다면 두 번째로 작은 최빈값을 출력해야 하는 조건이 있다. 

 

 산술평균은 반올림한 값을 출력해야 하므로 Math 라이브러리의 round를 이용하여 해결하였고, 중앙값과 범위는 사실 어려운 부분이 하나도 없다. 제일 까다로운 부분은 최빈값을 구하는 부분인데, 최빈값이 하나라면 그 값만 출력하면 되지만 최빈값이 여러개라면 두 번째로 작은 값을 출력해야 하는 것이 조금 까다롭게 다가왔다. 우선, 해시 맵에다가 입력받은 값을 key, 등장 횟수를 value로 저장해 주었다. 모든 입력이 끝나면 이 해시 맵을 List로 변환하였고, 이 List를 등장 횟수에 대응하는 해시 맵의 value를 기준으로 내림차순 정렬하였다. 그렇다면 이 List에 저장된 첫 번째 항목의 value 값이 최빈값의 등장 횟수가 된다. 이제 해시 맵에서 value 값이 최빈값의 등장 횟수가 같은 key 값을 mode_list에 저장해 주면 mode_list에는 최빈값이 될 수 있는 값들이 모두 들어가게 된다. 이제 mode_list의 크기가 1이라면 최빈값이 하나, 반대라면 최빈값이 여러개인 것이다. 최빈값이 여러개인 경우에는 mode_list를 오름차순 정렬하여 mode_list의 두 번째 원소의 값을 출력하도록 하면 문제에서 요구하는 최빈값을 구할 수 있다.

 

코드

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        int[] arr = new int [n];
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i=0; i<n; i++) {
            arr[i] = Integer.parseInt(bf.readLine());
            if (! map.containsKey(arr[i])) {
                map.put(arr[i], 1);
            } else {
                map.put(arr[i], map.get(arr[i]) + 1);
            }
 
        }
        Arrays.sort(arr);
        int avg = 0;
        int mid = 0;
        int mode = 0;
        int range = 0;
        for (int i=0; i<n; i++) {
            avg += arr[i];
        }
        avg = Math.round((float) avg / n);
        mid = arr[n/2];
 
        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        int freq = list.get(0).getValue();
        List<Integer> mode_list = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getValue() == freq) {
                mode_list.add(list.get(i).getKey());
            }
        }
        Collections.sort(mode_list);
        if (mode_list.size() == 1) {
            mode = mode_list.get(0);
        } else {
            mode = mode_list.get(1);
        }
        range = arr[n-1] - arr[0];
        System.out.println(avg);
        System.out.println(mid);
        System.out.println(mode);
        System.out.println(range);
    }
}
Colored by Color Scripter
cs

'PS > Solve' 카테고리의 다른 글

[Java] Boj 1541: 잃어버린 괄호  (1) 2025.07.31
[Java] Boj 9375: 패션왕 신해빈  (1) 2025.07.28
[Java] Boj 1966: 프린터 큐  (2) 2025.07.25
[Java] Boj 1049: 기타줄  (0) 2025.07.14
[Java] Boj 1343: 폴리오미노  (0) 2025.07.14
'PS/Solve' 카테고리의 다른 글
  • [Java] Boj 1541: 잃어버린 괄호
  • [Java] Boj 9375: 패션왕 신해빈
  • [Java] Boj 1966: 프린터 큐
  • [Java] Boj 1049: 기타줄
hyeon0117
hyeon0117
컴공으로 살아남기
  • hyeon0117
    컴공 생활기
    hyeon0117
  • 전체
    오늘
    어제
    • 분류 전체보기 (69) N
      • Algorithm (2)
      • PS (25) N
        • Solve (25) N
      • CS (42) N
        • 객체지향설계 & 패턴 (12)
        • COLMAP (2)
        • 머신러닝 (1)
        • 프로그래밍 언어론 (19)
        • 형식언어 (7) N
        • 운영체제 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    디자인 패턴
    Formal Language
    PS
    객체지향언어
    함수
    구현
    객체지향
    BOJ
    디자인패턴
    최단 경로
    그리디 알고리즘
    선택 정렬
    형식언어론
    객체지향설계
    CS
    의미론
    촘스키 계층
    자료구조
    프로그래밍 언어론
    boj 1343
    유한 오토마타
    컴파일러
    정규 문법
    형식언어
    정규 언어
    알고리즘
    PLT
    자료형
    백준
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyeon0117
[Java] Boj 2108: 통계학
상단으로

티스토리툴바