문제링크
https://www.acmicpc.net/problem/1546
시간 제한/ 메모리 제한
2 초 | 128MB |
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
예제 입력
3
40 80 60
예제 출력
75.0
예제 입력
3
10 20 30
예제 출력
66.666667
문제 파악
3개를 받아 40 80 60의 점수가 입력되었다.
80이 가장 크기때문에 =M이되고, 40/80 한후 x100을한다. = 50이된다.
80/80 x 100 = 100, 60/80 x 100 =75
50 + 100 + 75 = 225 / 3 = 75점이 답이된다.
간단하게 하기
-(A +B+ C)*100 / M /3
(40+80+60)*100 / 80 /3
= 180 *100 / 80 /3
= 18000/240
소숫점이 있기때문에 더블형으로 바꿔준다.
정리
변수 N에 과목의 수 입력받기
길이가 N인 1차원 배열 A[] 선언하기
for(A[] 길이만큼 반복하기){
A[i]에 각 점수 저장하기
}
for(A[] 길이만큼 반복하기{
최고점은 변수 MAX에 , 총점은 변수 SUM에 저장하기
}
sum *100 / max/ N 출력하기
내가 작성한 코드
...
출력
...
풀이코드
package sec02.chap02;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int a = sc.nextInt(); //과목수를 입력받는다.
int[] b= new int[a]; //주어진 과목수만큼 과목점수를 입력받는다
int max= 0;
int sum = 0;
for (int i = 0; i < a; i++) { //주어진 과목수만큼 과목점수를 입력할 수 있게한다.
b[i] = sc.nextInt();
}
for (int i = 0; i < a; i++) {
if (max < b[i]) { //주어진 과목점수중 최댓값을 찾는다.
max = b[i];
}
sum += b[i]; //과목점수를 sum에 다 더한다.
}
System.out.println(sum*100.0/max/a); //sum과 100을 곱하고 최댓값과 과목갯수로 나눈다.
//100.0으로 입력함으로써 더블값으로 변경된다.
}
}
회고
그전에 푼 문제들을 풀고 풀어서 그런지 겹치는 내용도 많아 금방금방 생각이 났다.
문제를 읽을때 잘 읽는게 중요한거같다. 그전에 아스키코드로 바꾸는 생각과 double로 소숫점 생각하기!!!