[Java] 실전 문제 - 평균구하기(백준 1546)
2023. 9. 23. 12:16
🧑🏻💻 하루코딩 님의 Do it! 알고리즘 코딩테스트 강의(인프런)를 듣고 정리한 내용입니다.
https://www.acmicpc.net/problem/1546
1546번: 평균
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보
www.acmicpc.net
01. 문제 분석하기
- 만약 아래 예제를 가지고 생각을 해 본다면 세 가지 주어진 점수 중 최댓값은 80이다.
- 그래서 각각 점수를 고쳐 본다면
40/80*100 = 50
80/80*100 = 100
60/80*100 = 75
이러한 결과가 나올 것이고 이들의 총 평균을 구하면 75가 나오게 된다.
- 그래서 각각 점수를 고쳐 본다면
- 저런 식으로 계산한다는 것을 알게 되었으니 좀 더 정리를 해보자.
저 세 가지의 식을 일단 모두 더해야하는 것은 알고 있다. 그렇다면 아래와 같이 적을 수 있다.
(40/80*100) + (80/80*100) + (60/80*100) / 3 - 여기서 반복되는 것이 하나 있다. /80*100. 그렇다면 수식을 아래와 같이 줄일 수 있다.
(40 + 80 + 60)*100/80/3 - 위 수식을 기호로 나타내본다면 아래와 같이 표시할 수 있다. 이렇게 정리한 것을 문제를 풀 때 사용하면 된다.
(A + B + C)*100/M/3
02. 슈도 코드 작성하기
변수 N에 과목 수 입력받기
길이가 N인 1차원 배열 A[] 선언하기
for(A[] 길이만큼 반복){
A[i]에 각 점수 저장하기
}
for(A[] 길이만큼 반복){
최고점은 변수 max에 총 합은 sum에 저장
}
sum * 100 /max/N 출력하기
03. 실제 코드 작성하기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int A[] = new int[N];
for(int i = 0; i<N; i++){
A[i] = sc.nextInt();
}
long sum=0;
long max = 0;
for(int i=0; i<N; i++){
if(max<A[i]) max = A[i];
sum+=A[i];
}
System.out.println(sum*100.0/max/N);
}
}
'코딩테스트 > 알고리즘' 카테고리의 다른 글
[Java] 03-2. 자료구조 : 구간 합 구하기 1 (0) | 2023.09.23 |
---|---|
[Java] 실전 문제 - 숫자의 합 구하기(백준 11720) (0) | 2023.09.23 |
[Java] 03-1. 자료구조 : 배열과 리스트 (0) | 2023.09.21 |
[Java] 02. 디버깅 (0) | 2023.09.21 |
[Java] 01. 시간 복잡도 (0) | 2023.09.21 |