1.문제
어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 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의 배수이다.
* 첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다. 평균과 중앙값은 모두 자연수이다.
2.선택정렬을 이용한 방법
import java.util.Scanner;
public class Main {
/*
* 2022-11-08 : 대표값2
*
* Q. 5개의 자연수를 입력받고 평균과 중앙값 구하기.
*
* >> 자연수는 100보다 작은 10의 배수.
* >> 중앙값이란? 숫자를 정렬했을 때 중앙에 있는 값 ( 10 30 30 40 60 --> 30 )
* */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[5];
int avg, mid;
//자연수 입력받기
for(int i=0; i<arr.length; i++) {
arr[i] = sc.nextInt();
}
sc.close();
//1. 평균 구하기
int sum = 0;
for(int i=0; i<arr.length; i++) {
sum += arr[i];
}
avg = sum/5;
//2-1.중앙값 구하기 : 선택정렬
for(int i=0; i<arr.length; i++) {
for(int j= i+1; j<arr.length; j++) {
//최소값 찾기
if(arr[j] < arr[i]) {
int temp = arr[i];
arr[i] = arr[j]; //최소값과 비교한 값의
arr[j] = temp; //자리 바꾸기
}
}
}
mid = arr[2]; //중앙값
//정답 제출용
System.out.println(avg);
System.out.println(mid);
//확인용
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
}//end main
}
3.삽입정렬을 이용한 방법
import java.util.Scanner;
public class Main {
/*
* 2022-11-08 : 대표값2
*
* Q. 5개의 자연수를 입력받고 평균과 중앙값 구하기.
*
* >> 자연수는 100보다 작은 10의 배수.
* >> 중앙값이란? 숫자를 정렬했을 때 중앙에 있는 값 ( 10 30 30 40 60 --> 30 )
* */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[5];
int avg, mid;
//자연수 입력받기
for(int i=0; i<arr.length; i++) {
arr[i] = sc.nextInt();
}
sc.close();
//1. 평균 구하기
int sum = 0;
for(int i=0; i<arr.length; i++) {
sum += arr[i];
}
avg = sum/5;
//2-2.중앙갑 구하기 : 삽입정렬
for(int i=1; i<arr.length; i++) { //1번 인덱스부터
int key = arr[i];
int j = i-1; //0번 인덱스부터 (비교군)
//key 보다 큰 수가 앞에 있다면
while(j >=0 && arr[j] > key) {
arr[j+1] = arr[j]; //뒤로 한 칸 이동
j--;
}
arr[j+1] = key; //앞으로 한 칸 이동 or 자리유지 (while문 안탔을경우)
}
mid = arr[2]; //중앙값
//정답 제출용
System.out.println(avg);
System.out.println(mid);
//확인용
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
}//end main
}
'Algorithm' 카테고리의 다른 글
[javascript/프로그래머스] 가장 많이 받은 선물 (0) | 2024.05.19 |
---|---|
[Java/백준] 25305.정렬 - 커트라인 (삽입정렬) (0) | 2022.11.10 |
[Java/백준] 2750.정렬 - 수 정렬하기1 (삽입정렬) (0) | 2022.11.07 |
[ Java/ 백준 ] 2480.조건문 - 주사위 세개 (0) | 2022.11.04 |
[Oracle / 프로그래머스] 입양 시각 구하기(2) - LEVEL, WITH AS (0) | 2022.02.17 |