본문 바로가기

알고리즘/백준

[백준 알고리즘 자바] 2587 : 대표값2

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

 

2587번: 대표값2

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

www.acmicpc.net


문제

  • 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 
  • 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 
  • 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + 30) / 5 = 170 / 5 = 34가 된다.
  • 평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 
  • 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 
  • 예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면
  • 10 30 30 40 60
  • 이 되고 따라서 중앙값은 30이 된다.
  • 다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오.

입력

  • 첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 100 보다 작은 10의 배수이다.

출력

  • 첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다. 평균과 중앙값은 모두 자연수이다.

입출력 예제


풀이방식

이번 문제는 정렬을 사용하여 푸는 문제이다.


설계과정

1. 입력받은 배열을 오름차순으로 정렬한다.

2. 평균을 구하는 함수를 작성한다.

3. 배열의 인덱스 값을 사용해서 중간값을 구하는 함수를 작성한다.

4. 구한 값들을 출력한다.


풀이과정

1. 값을 입력받는 코드를 작성한다.

 

2. 배열을 오름차순으로 정렬한다.

  • Arrays.sort() : 배열을 자동으로 오름차순으로 정렬해준다.

3. 먼저 평균을 구하는 함수를 작성한다.

 

4. for문을 통해 sum에 배열에 있는 모든 원소의 합을 구해서 넣는다.

 

5. sum을 N으로 나누어서 평균값을 구한다.

 

6. 다음으로 중간값을 구하는 함수를 작성한다.

 

7. 결과값을 저장할 변수와 배열의 중간 인덱스 값을 저장할 변수를 선언한다.

  • N / 2 를 통해 N개의 배열에서 중간에 위치하는 인덱스 값을 구한다.
  • 이는 앞서 배열을 오름차순으로 정렬했기에 가능한 방식이다.

8. mid 변수에 midx 를 인덱스로 가지는 배열의 값을 저장한다.

  • midx는 N / 2 로 배열의 중간에 위치하는 인덱스 값이다.

9. 각 값들을 출력한다.

 


답안소스

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static int average(int N, int[] arr) {
		int avg = 0;
		int sum = 0;
		
		for(int i=0; i<N; i++) {
			sum += arr[i];
		}
		
		avg = sum / N;
		
		return avg;
	}
	
	public static int middleValue(int N, int[] arr) {
		int mid = 0;
		int midx = N/2;
		
		mid = arr[midx];
		
		return mid;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = 5;
		int[] arr = new int[N];
		
		for(int i=0; i<N; i++) {
			arr[i] = sc.nextInt();
		}
		
		Arrays.sort(arr);
		
		System.out.println(Main.average(N, arr));
		System.out.println(Main.middleValue(N, arr));
	}
}