문제
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인 것에 비해 너무나도 간단한 누적합 문제였다.
누적합을 기록해 둔 뒤에 원하는 구간에 맞춰 계산을 하면 되는 단순한 문제였다.
'문제 풀이 > 소프티어' 카테고리의 다른 글
[소프티어] 8단 변속기(JAVA) (1) | 2025.03.11 |
---|---|
[소프티어] 금고털이(JAVA) (0) | 2025.03.11 |
[소프티어] 나무 공격(JAVA) (0) | 2025.02.16 |
[소프티어] Recovering the Region(JAVA) (0) | 2025.02.15 |
[소프티어] GPT식 숫자 비교(JAVA) (0) | 2025.02.13 |