📝 문제
❗ 주의
출력시 실수형으로 출력해야함.
마지막 평균 연산시 전부 정수로 연산하지 말 것.
🔑 풀이 과정
새로운 평균을 구하는 공식을 계산했다.
총 3번을 풀어서 정답을 받았다. 1번째 2번째 시도도 예제케이스를 잘 출력해서 당황스러웠다.
합계를 구하는 것은 문제가 없는데, 최댓값 or 평균을 구하는 것에서 문제가 있던듯 하다.
아직도 명확히 틀린점을 모르겠지만... 1번째 제출과 3번째 제출의 차이점은
① 최댓값을 처음 구할때 max = arr[0] 이라 했던 것을 max = 0 으로 초기화함
② 마지막 출력 값을 double avg = (100 * sum) / n / max 에서 System.out.println(sum * 100.0 / max / n); 로 변경함(전자로 했어도 소수점이 출력이 잘 됐었다... 그래서 더 당황스러운)
🔓 답안
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 첫째 줄에는 시험 본 과목의 개수 N이 주어짐
int n = sc.nextInt();
int[] arr = new int[n];
// 둘째 줄에 세준이의 현재 성적이 주어짐
for(int i = 0; i < n; i++){
arr[i] = sc.nextInt();
}
int sum = 0;
// 최대값 구하기
double max = 0;
for(int i = 0; i < n; i++){
if(arr[i] > max){
max = arr[i];
}
sum = sum + arr[i];
}
// 새로운 평균 구하기
System.out.println(sum * 100.0 / max / n);
sc.close();
}
}
+ for문으로 최대값을 구하지 않고,
Array.sort()를 사용하여 오름차순으로 정렬한 뒤 맨 마지막 값을 최대값으로 저장한 방법.
최대값, 합계(sum)을 따로따로 구해서 코드가 길어지길래 합계를 입력받으면서 구해보았다.
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 첫째 줄에는 시험 본 과목의 개수 N이 주어짐
int n = sc.nextInt();
int[] arr = new int[n];
int sum = 0;
// 둘째 줄에 세준이의 현재 성적이 주어짐
for(int i = 0; i < n; i++){
arr[i] = sc.nextInt();
sum = sum + arr[i];
}
// 최대값 구하기
double max = 0;
Arrays.sort(arr);
max = arr[n-1];
// 새로운 평균 구하기
System.out.println(sum * 100.0 / max / n);
sc.close();
}
}
'PS > Baekjoon' 카테고리의 다른 글
[Baekjoon] 11659 - 구간 합 구하기 4 (0) | 2022.11.10 |
---|---|
[Baekjoon] 11720 - 숫자의 합 (0) | 2022.11.09 |
[Baekjoon] 5597 - 과제 안 내신 분..? (0) | 2022.11.07 |
[Baekjoon] 10926 - ??! (0) | 2022.11.05 |
[Baekjoon] 2742 - 기찍 N (0) | 2022.11.04 |
댓글