알고리즘

공부 109일차: 백준 2587번 대표값2 자바 java

김발자~ 2022. 11. 16. 23:03
반응형

2587 대표값2

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

 

2587번: 대표값2

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 +

www.acmicpc.net

 

 

 


백준 단계별로 풀어보기 정렬

2587번 문제 대표값2


문제


 

 

 

 


과정 생각해보기


 

역시나 간단한 문제

sort메서드를 이용하면 매우 간단하겠지만, 매우 효율적인 정렬 알고리즘인 카운팅 정렬을 이용해보려 한다

https://gimbalja.tistory.com/72

 

백준 10989번 수 정렬하기 3 자바 / 백준 단계별로 풀어보기 9단계 / 9. 정렬

백준 9단계 3번 문제 - 10989 수 정렬하기 3 https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수

gimbalja.tistory.com

카운팅 정렬에 대한 자세한 설명을 위의 링크를 살펴보면 된다

 

과정은 다음과 같다

1. 입력되는 숫자 n을 받아서 변수 sum에 더하고, 카운팅 함수의 인덱스값에 넣고 1을 더한다

2. 5 크기의 배열 arr을 선언하여 10부터 90까지 10씩 커지는 반복문에 넣는다

3. 중복을 허용하므로 그 반복문 안에서 while문을 돌려 0보다 크다면(즉, 적혀있던 번호라면) arr 배열에 넣는다

4. sum/5와 arr[2]를 출력한다

 

 


정답 인정 코드


 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
 
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] counting = new int[91];    //인덱스 '90'까지 나와야
        
        int sum = 0;
        for(int i = 0; i < 5; i++) {
            int n = Integer.parseInt(br.readLine());
            sum += n;
            counting[n]++;
        }
        
        
        int[] arr = new int[5];
        int j = 0;
        for(int i = 10; i < 90; i+=10) {    //인덱스값 10~90
            while(counting[i] > 0) {    //중복된 값도 넣으므로 if문이 아닌 while문
                arr[j] = i;
                counting[i]--;
                j++;
            }
        }
        
        System.out.println(sum/5);    //평균
        System.out.println(arr[2]);    //중앙값 (인덱스 0, 1, 2, 3, 4 중 2)
 
    }
 
}
 
cs

 

과정 설명과 주석에 최대한 자세히 쓰려고 해봤다

 

 

 


다른 사람들 코드를 살펴보니 대부분 sort메서드로 푼 듯하다

카운팅 정렬의 속도가 매우 빠르다고 하니 익숙해지는 게 좋을 것 같아 이대로 풀었다

반응형