[백준] 평균(1546)

Wonho Kim·2025년 1월 15일

Baekjoon

목록 보기
3/42

https://www.acmicpc.net/problem/1546

Python

이 문제는 입력 받은 점수 중 최대값을 구한 다음, 모든 점수를 최댓값 * 100으로 나누는 것이다.

근데 각각 점수를 변환할 필요 없이 모든 점수를 더한 후 새로운 평균을 산출해도 된다.

(A/MAX100+B/MAX100+C/MAX100)/3(A / MAX * 100 + B / MAX * 100 + C / MAX * 100) / 3
=(A+B+C)100/M/3= (A + B + C) * 100 / M / 3

따라서 문제 풀이 방법은 다음과 같다.

  1. 입력받은 점수를 리스트에 저장한 후 정수형으로 변환
  2. 리스트에 있는 점수에서 최댓값 구하기
  3. 모든 수 더하기
  4. 모든 수 더한 값 * 100 / MAX / N 출력
N = int(input())
sub = list(input().split())

for i in range(N):
    sub[i] = int(sub[i])
    
M = max(sub)
sum = sum(sub)
print(sum * 100 / M / N)

split() 함수를 사용해서 공백을 기준으로 리스트에 점수를 저장하고, 반복문을 통해 str 타입인 점수를 int 형을 바꾼다.

max() 함수를 통해 최댓값을 구하고, sum() 함수를 통해 합계를 구한 다음 새롭게 계산한 평균을 출력한다.

근데 리스트의 str 자료형을 일일이 int 형으로 바꾸는 반복문이 번거롭다면 아래와 같이 map() 함수를 조합하여 사용하면 매우 편리하다.

map(function, iterable1, iterable2, ...)
N = int(input())
sub = list(map(int, input().split()))
M = max(sub)
sum = sum(sub)
print(sum * 100 / M / N)

위와 같이 작성하면 점수를 str로 입력받을 때마다 바로바로 int형으로 바꿔서 리스트에 저장해준다.

Java

파이썬으로 문제를 푼다고 해도 위에 사용한 핵심 로직은 그대로 사용할 수 있다.

(A/MAX100+B/MAX100+C/MAX100)/3(A / MAX * 100 + B / MAX * 100 + C / MAX * 100) / 3
=(A+B+C)100/M/3= (A + B + C) * 100 / M / 3

다만 자바 언어 특성 상 입력받을 개수가 정해질 경우 ArrayList보다는 단순 배열을 사용해도 될 것 같다.

따라서 코드는 아래와 같다.

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();
        }

        double sum = 0;
        double max = 0;
        for (int i = 0; i < N; i++) {
            if (A[i] > max) {
                max = A[i];
            }
            sum += A[i];
        }

        System.out.println(sum * 100 / max / N);
    }
}

자바는 공백을 두고 입력받는 경우 for문으로 받으면 된다는 점을 기억하자.

profile
새싹 백엔드 개발자

0개의 댓글