728x90
= 문제 =
문제
어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다.
평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다.
예를 들어 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
10
40
30
60
30
예제 출력 1
34
30
= 처음 내가 작성한 코드 =
package 정렬.bronze.no2587;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] number = new int[5];
int avg = 0;
int[] check = new int[5];
int mid = 0;
int temp = 0;
for (int i = 0; i < number.length; i++) {
number[i] = scanner.nextInt();
}
for (int i : number) {
avg += i;
}
avg /= 5;
System.out.println(avg);
for (int i = 0; i < number.length; i++) {
mid = avg - number[i];
if (mid == 0) {
break;
} else if (mid != 0) {
if (mid < 0) {
check[i] = mid * (-1);
} else if (mid > 0) {
check[i] = mid;
}
}
}
for (int i = 0; i < check.length - 1; i++) {
for (int j = i + 1; j < check.length; j++) {
if (check[i] > check[j]) {
temp = check[i];
check[i] = check[j];
check[j] = temp;
temp = number[i];
number[i] = number[j];
number[j] = number[i];
}
}
}
mid = number[0];
System.out.println(mid);
}
}
문제를 꼼꼼하게 읽지 못했다.
중앙값을 순서대로 나열했을 때, 평균과 가장 근접한 값이라고 문제를 이해했다.
그래서 평균과 가장 근접한 값을 구해서 출력했던 거였음..
근데 틀렸다고 떠서 문제를 다시 읽어보니까 5개 숫자를 순서대로 나열하고 그 중에 가운데 값이 중앙값이였다.
= 다시 푼 내용 =
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] number = new int[5];
int avg = 0;
int mid = 0;
int temp = 0;
for (int i = 0; i < number.length; i++) {
number[i] = scanner.nextInt();
}
for (int i : number) {
avg += i;
}
avg /= 5;
for (int i = 0; i < number.length - 1; i++) {
for (int j = i + 1; j < number.length;j ++) {
if (number[i] > number[j]) {
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
}
mid = number[2];
System.out.println(avg);
System.out.println(mid);
}
}
5개의 평균을 구해서 avg에 담고
다시 내가 입력한 5개의 number값을 오름차순으로 정렬을 하고 거기에 있는 가운데 index 2번을 mid 값에 넣어주면 된다.
이런 사소한 실수를 줄이면서 어떻게 하면 더 효율적으로 짤 수 있는지 항상 생각하자.
728x90
'백준 오답노트 > 정렬' 카테고리의 다른 글
백준 - 정렬 18870번 좌표 압축 / 문제 이해 못함 + 설명 (0) | 2022.11.25 |
---|---|
백준 - 정렬 10814번 문제 틀린 이유 + 해결 완료 (0) | 2022.11.19 |
백준 - 정렬 2751번 문제 틀린 이유 + 해결 (0) | 2022.11.15 |