Home [BaekJoon] 2108 톡계학 JAVA
Post
Cancel

[BaekJoon] 2108 톡계학 JAVA

πŸ”— λ°±μ€€ 2108 톡계학 https://www.acmicpc.net/problem/2108

문제

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

  1. μ‚°μˆ ν‰κ·  : N개의 μˆ˜λ“€μ˜ 합을 N으둜 λ‚˜λˆˆ κ°’
  2. 쀑앙값 : N개의 μˆ˜λ“€μ„ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ λ‚˜μ—΄ν–ˆμ„ 경우 κ·Έ 쀑앙에 μœ„μΉ˜ν•˜λŠ” κ°’
  3. μ΅œλΉˆκ°’ : N개의 μˆ˜λ“€ 쀑 κ°€μž₯ 많이 λ‚˜νƒ€λ‚˜λŠ” κ°’
  4. λ²”μœ„ : N개의 μˆ˜λ“€ 쀑 μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ˜ 차이

N개의 μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ„€ 가지 κΈ°λ³Έ 톡계값을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.


μž…λ ₯

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


좜λ ₯

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

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

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

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


풀이

평균값 : μž…λ ₯받은 λͺ¨λ“  수λ₯Ό λ”ν•˜μ—¬ λ‚˜λˆˆ 평균을 round둜 μ†Œμˆ˜μ μ„ λ°˜μ˜¬λ¦Όν•˜μ—¬ 좜λ ₯ 쀑앙값 : μž…λ ₯받은 μˆ˜κ°€ λ“€μ–΄μžˆλŠ” 배열을 μ •λ ¬ν•œ ν›„ n/2에 μœ„μΉ˜ν•œ 값을 좜λ ₯ λ²”μœ„ : μ •λ ¬ν•œ λ°°μ—΄μ—μ„œ κ°€μž₯ 큰 수 - κ°€μž₯ μž‘μ€ 수 λ₯Ό 좜λ ₯

μ—¬κΈ°μ„œ λ¬Έμ œλŠ” μ΅œλΉˆκ°’μ΄λ‹€. μ—¬λŸ¬κ°œκ°€ μžˆλ‹€λ©΄ μ΅œλΉˆκ°’ 쀑 두 번째둜 μž‘μ€ 값을 좜λ ₯ν•΄μ•Όν•œλ‹€. μ—¬κΈ°μ„œ κ³ λ―Όν•˜λŠ” λ™μ•ˆ μ‹œκ°„μ„ 쑰금 μž‘μ•„λ¨Ήμ—ˆλ‹€.

λ¨Όμ € μ΅œλΉˆκ°’μ„ κ΅¬ν•˜κΈ° μœ„ν•΄ 수λ₯Ό μž…λ ₯받을 λ•Œλ§ˆλ‹€ κ·Έ 수λ₯Ό index둜 ν•˜μ—¬ μΉ΄μš΄νŒ…ν•  boolean 배열을 μ„ μ–Έν•΄μ£Όμ—ˆλ‹€. κ·Έ ν›„λ‘œ μΉ΄μš΄νŒ…μ„ 끝낸 ν›„, boolean λ°°μ—΄μ—μ„œ κ°€μž₯ 큰 수λ₯Ό μ°Ύμ•„ κ·Έ 인덱슀λ₯Ό list에 μ €μž₯ν•œλ‹€.

λ§Œμ•½ list의 길이가 1보닀 크닀면 1번 μΈλ±μŠ€μ— μ €μž₯ν•œ 수λ₯Ό, μ•„λ‹ˆλΌλ©΄ 0번째 수λ₯Ό 좜λ ₯μ‹œμΌœμ€€λ‹€.

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
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());
        int[] arr = new int[n];
        List<Integer> list = new ArrayList<>();
        int[] check = new int[8001]; // μ ˆλŒ€κ°’ 4000, 즉 -4000 ~ 4000κΉŒμ§€ 총 8001개
        int max = 0;
        int sum = 0;

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            sum += arr[i];
            check[arr[i] + 4000]++;
        }

        System.out.println((int)Math.round((double)sum/n)); // 평균
        Arrays.sort(arr);
        System.out.println(arr[n/2]); // 쀑앙값

        for (int i = 0; i < 8001; i++) max = Math.max(max, check[i]);
        for (int i = 0; i < 8001; i++) if(check[i] == max) list.add(i - 4000);

        System.out.println(list.size() > 1 ? list.get(1) : list.get(0)); // μ΅œλΉˆκ°’
        System.out.println(arr[arr.length-1] - arr[0]); // λ²”μœ„
    }
}
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 1978 μ†Œμˆ˜ μ°ΎκΈ° JAVA

[BaekJoon] 2798 λΈ”λž™μž­ JAVA