728x90
백준 단계별 문제풀이 4단계 (1차원 배열)
https://www.acmicpc.net/problem/1546
# 문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
# 예제
입력 - 첫쨰줄에는 과목개수 N ( N <= 1000 ), 둘쨰줄에는 현재성적 주어짐
3
40 80 60
출력
75.0
# 필요개념
최대값을 받은 후, 스트림을 이용해 ‘i / max * 100’ 이라는 조건에 맞춰 값을 매핑해주었다. 이때, int로 하면 나누었을 때 원하는 값이 나오지 않을 수도 있으므로 mapToDouble() 메소드를 이용해 double타입으로 매핑해주었다!
mapToDouble은 출력값의 형태를 double형으로 바꾸는 역할을 한다!
나누기 연산을 사용할 떄에는 int형으로 진행하면 소수자리를 버림하기 때문에 원하는 답과 다르게 나올 수 있다! 안전하게 실수형을 사용하는 것이 좋다.
# Code
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
int[] arr = new int[size];
for (int i = 0 ; i < size ; i++) {
arr[i] = sc.nextInt();
}
int max = Arrays.stream(arr).max().getAsInt();
double sum = Arrays.stream(arr).mapToDouble(i -> (double) i / max * 100).sum();
double avg = (double) sum / size;
System.out.println(avg);
}
}
# 결과
'코딩테스트 > 백준 브론즈,실버' 카테고리의 다른 글
[백준] 11654 : 아스키코드 (System.in에 대해) - JAVA (0) | 2024.01.15 |
---|---|
[백준] 9086 : 문자열 (next와 nextLine) - JAVA (1) | 2024.01.15 |
[백준] 3052 : 나머지 (distinct() 메소드) - JAVA (0) | 2024.01.14 |
[백준] 10813 : 공바꾸기 (setAll() 메소드) - JAVA (0) | 2024.01.14 |
[백준] 10818 : 최소, 최대 (stream의 min, max) - JAVA (0) | 2024.01.14 |