반응형
https://www.acmicpc.net/problem/1546
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
처음에는 아래처럼 생각했는데 작동되지 않았다.
소수점 둘째자리까지 나타내는 걸 보고 int형이 아닌 double형을 사용해야 한다는 것을 알아채야한다.
package Problems;
import java.util.Scanner;
public class a1546 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N];
int max = 0;
int sum = 0;
//arr안에 과목 점수 넣기
for(int i=0; i<N; i++) {
arr[i] = sc.nextInt();
}
//for if문으로 max구하기
for(int i=1; i<N+1; i++) {
if(arr[i-1]>=arr[i]) {
max = arr[i-1];
} else {
max = arr[i];
}
}
for(int i=0; i<N; i++) {
//arr[i] = (arr[i]/max)*100;
sum = (arr[i]/max)*100;
}
System.out.println(sum/N);
}
}
정답은 아래 코드와 같다.
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double[] arr = new double[sc.nextInt()];
for(int i=0; i<arr.length; i++) {
arr[i] = sc.nextDouble();
}
sc.close();
double sum = 0;
Arrays.sort(arr);
for(int i=0; i<arr.length; i++) {
sum += ((arr[i] / arr[arr.length-1]) * 100);
}
System.out.println(sum / arr.length);
}
}
double형인 arr 배열에 sc.nextInt()로 원소를 입력받는다.
원소의 개수는 arr.length까지의 범위를 두어 주어진 갯수를 받는다.
sum의 자료형도 double로 해 소수 둘째자리까지 표현하게 만든다.
Arrays.sort를 사용해 arr을 오름차순으로 정렬하고,
sum에 덧대어 더하는 방식으로 ((arr[i]/arr[arr.length-1]) * 100)을 사용한다.
주의해야 하는 부분은 오차범위이고, 연산 할 때 자료형 1개 이상은 반드시 double 형으로 표현해야 한다.
그러면 자동 형변환으로 자료형이 큰 쪽으로 변환된다. int -> double
반응형
'백준 알고리즘' 카테고리의 다른 글
백준 [27866] 문자와 문자열 - 자바 풀이 (0) | 2023.05.25 |
---|---|
백준 [2744] 대소문자 바꾸기 - 자바 풀이 (0) | 2023.05.25 |
백준 [10810] 공 넣기 - 자바 풀이 (0) | 2023.05.19 |
백준 [8958] OX퀴즈 - 자바 풀이 (0) | 2023.05.19 |
백준 [11720] 숫자의 합 - 자바 풀이 (0) | 2023.05.18 |