PS/BaekJoon

2108 JAVA 톡계학

chaerlo127 2024. 2. 8. 17:46
728x90
 

2108번: 톡계학

첫째 쀄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진닀. 단, N은 ν™€μˆ˜μ΄λ‹€. κ·Έ λ‹€μŒ N개의 μ€„μ—λŠ” μ •μˆ˜λ“€μ΄ 주어진닀. μž…λ ₯λ˜λŠ” μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ€ 4,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

www.acmicpc.net

πŸ€ 문제

수λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것은 ν†΅κ³„ν•™μ—μ„œ μƒλ‹Ήνžˆ μ€‘μš”ν•œ 일이닀. ν†΅κ³„ν•™μ—μ„œ N개의 수λ₯Ό λŒ€ν‘œν•˜λŠ” κΈ°λ³Έ ν†΅κ³„κ°’μ—λŠ” λ‹€μŒκ³Ό 같은 것듀이 μžˆλ‹€. 단, N은 ν™€μˆ˜λΌκ³  κ°€μ •ν•˜μž.

μ‚°μˆ ν‰κ·  : N개의 μˆ˜λ“€μ˜ 합을 N으둜 λ‚˜λˆˆ κ°’
쀑앙값 : N개의 μˆ˜λ“€μ„ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ λ‚˜μ—΄ν–ˆμ„ 경우 κ·Έ 쀑앙에 μœ„μΉ˜ν•˜λŠ” κ°’
μ΅œλΉˆκ°’ : N개의 μˆ˜λ“€ 쀑 κ°€μž₯ 많이 λ‚˜νƒ€λ‚˜λŠ” κ°’
λ²”μœ„ : N개의 μˆ˜λ“€ 쀑 μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ˜ 차이
N개의 μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ„€ 가지 κΈ°λ³Έ 톡계값을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ€ μž…λ ₯

첫째 쀄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진닀. 단, N은 ν™€μˆ˜μ΄λ‹€. κ·Έ λ‹€μŒ N개의 μ€„μ—λŠ” μ •μˆ˜λ“€μ΄ 주어진닀. μž…λ ₯λ˜λŠ” μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ€ 4,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

πŸ€ 좜λ ₯

첫째 μ€„μ—λŠ” μ‚°μˆ ν‰κ· μ„ 좜λ ₯ν•œλ‹€. μ†Œμˆ˜μ  μ΄ν•˜ 첫째 μžλ¦¬μ—μ„œ λ°˜μ˜¬λ¦Όν•œ 값을 좜λ ₯ν•œλ‹€.

λ‘˜μ§Έ μ€„μ—λŠ” 쀑앙값을 좜λ ₯ν•œλ‹€.

μ…‹μ§Έ μ€„μ—λŠ” μ΅œλΉˆκ°’μ„ 좜λ ₯ν•œλ‹€. μ—¬λŸ¬ 개 μžˆμ„ λ•Œμ—λŠ” μ΅œλΉˆκ°’ 쀑 두 번째둜 μž‘μ€ 값을 좜λ ₯ν•œλ‹€.

λ„·μ§Έ μ€„μ—λŠ” λ²”μœ„λ₯Ό 좜λ ₯ν•œλ‹€.

πŸ€ 예제

예제 μž…λ ₯ 1

5
1
3
8
-2
2

예제 좜λ ₯ 1

2
2
1
10

예제 μž…λ ₯ 2

1
4000

예제 좜λ ₯ 2

4000
4000
4000
0

예제 μž…λ ₯ 3

5
-1
-2
-3
-1
-2

예제 좜λ ₯ 3

-2
-2
-1
2

예제 μž…λ ₯ 4

3
0
0
-1

예제 좜λ ₯ 4

0
0
0
1

πŸ€ μ½”λ“œ

λ‚˜λ¨Έμ§€λŠ” λ‹€ μ‰½κ²Œ 해결이 κ°€λŠ₯ν•˜μ§€λ§Œ, μ΅œλΉˆκ°’μ˜ κ²½μš°μ—λŠ” 값을 μ €μž₯ν•˜κ³  λΉ„κ΅ν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€. key, value μ‚¬μš©μ„ μœ„ν•΄ HashMap을 μ΄μš©ν–ˆκ³ , 이λ₯Ό 톡해 μž…λ ₯된 각 숫자의 λΉˆλ„λ₯Ό μ €μž₯ν•œλ‹€.
이후, μ΅œλΉˆλ„λ₯Ό μ°Ύμ•„μ„œ μ΅œλΉˆλ„λ₯Ό κ°–κ³ μžˆλŠ” μˆ«μžλ“€ 쀑에 두 번째둜 μž‘μ€ 숫자(Key)λ₯Ό μ„ νƒν•œλ‹€. λ§Œμ•½, μ΅œλΉˆλ„λ₯Ό κ°–κ³  μžˆλŠ” μˆ«μžκ°€ 1개라면 κ·Έ 숫자λ₯Ό 좜λ ₯ν•œλ‹€.

import java.io.*;
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());
        
        ArrayList<Integer> ar = new ArrayList<>();
        HashMap<Integer, Integer> map = new HashMap<>();
        
        double sum = 0;
        for(int i = 0; i < n; i++){
            int num = Integer.parseInt(br.readLine());
            ar.add(num);
            sum += num;
            // μ΅œλΉˆκ°’μ„ μœ„ν•΄ μ €μž₯
            if(map.containsKey(num)) map.replace(num, map.get(num) + 1);
            else map.put(num, 1);
        }

        // μ΅œλΉˆκ°’ κ΅¬ν•˜κΈ°
        int max = 0;
        for (int value : map.values()){
            max = Math.max(max, value);
        }
        List<Integer> li = new ArrayList<>();
        for (int key : map.keySet()){
            if(map.get(key) == max){
                li.add(key);
            }
        }
        Collections.sort(li);


        // μ •λ ¬
        Collections.sort(ar);
        // μ‚°μˆ  평균
        System.out.println(Math.round(sum/n));
        // 쀑앙값
        System.out.println(ar.get(((int)ar.size()/2)));
        // μ΅œλΉˆκ°’
        System.out.println(li.size() == 1 ? li.get(0) : li.get(1));
        // λ²”μœ„
        System.out.println(Math.abs(ar.get(ar.size()-1)-ar.get(0)));
    }
}
728x90