문제 풀이/소프티어

[소프티어] 성적 평균(JAVA)

27200 2025. 3. 11. 20:35

문제

https://softeer.ai/practice/6294


풀이

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken()); // 학생 수
        int k = Integer.parseInt(st.nextToken()); // 구간 수

        long[] arr = new long[n]; // 학생들의 점수를 기록할 배열
        long[] sum = new long[n]; // 누적합을 기록할 배열

        st = new StringTokenizer(br.readLine());
        long totalSum = 0; // 누적합 추적용

        for(int i = 0; i < n; i++){
            arr[i] = Integer.parseInt(st.nextToken()); // 학생 점수 저장
            totalSum += arr[i]; 
            sum[i] = totalSum; // 누적합 저장
        }

        for(int i = 0; i < k; i++){
            st = new StringTokenizer(br.readLine());
            int first = Integer.parseInt(st.nextToken()) - 1; // 구간 A(인덱스를 위하여 -1)
            int second = Integer.parseInt(st.nextToken()) - 1; // 구간 A(인덱스를 위하여 -1)
            double answer = sum[second];
            if(first != 0){ // 인덱스가 0인 경우에는 뺄 것 없음.
                answer -= sum[first-1];
            }
            System.out.println(String.format("%.2f", answer / (second - first + 1))); // 소숫점 두번째 자리까지 포맷팅
        }
    }

}

문제 풀이 전략

 

레벨 3인 것에 비해 너무나도 간단한 누적합 문제였다.

 

누적합을 기록해 둔 뒤에 원하는 구간에 맞춰 계산을 하면 되는 단순한 문제였다.