티스토리 뷰

728x90

출제의 의도가 1. 형변환을 할 줄 아는지 2. 소숫점 자릿수를 표시 할 줄 아는지 인 것 같다.

1. 문제

N명의 학생들의 성적이 학번순서대로 주어졌다.

 

학번 구간 [A, B]가 주어졌을 때 이 학생들 성적의 평균을 구하는 프로그램을 작성하라.

[제약조건]

1 ≤ N ≤ 106 인 정수

1 ≤ K ≤ 104 인 정수

1 ≤ Si ≤ 100 인 정수

1 ≤ Ai ≤ Bi ≤ N

[입력형식]

첫 번째 줄에 학생 수 N과 구간 수 K가 주어진다.

두 번째 줄에는 학생의 성적 Si (1 ≤ i ≤ N)가 주어진다. i + 2 (1 ≤ i ≤ K)번째 줄에는 i번째 구간 Ai, Bi가 주어진다.

[출력형식]

i번째 줄에 i번째 구간의 성적평균(소수셋째자리에서 반올림)을 출력한다.

차이가 0.01이하이면 정답으로 채점됨.

[입력예제1]
5 3
10 50 20 70 100
1 3
3 4
1 5
[출력예제1]
26.67
45.00
50.00

2. 정답코드

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] scores = new int[n+1];
        for (int i=1; i<n+1; i++) {
            scores[i] = sc.nextInt();
        }
        List<int[]> list = new ArrayList<>();
        List<Double> answers = new ArrayList<>();
        for (int i=0; i<m; i++) {
            int[] e = new int[2];
            e[0] = sc.nextInt();
            e[1] = sc.nextInt();
            list.add(e);
        }

        for (int[] a : list) {
            int sum =0;
            for (int i=a[0]; i<= a[1]; i++) {
                sum += scores[i];
            }
            double an = (double) sum/(a[1]-a[0]+1); //이 부분이 핵심
            answers.add(an);
        }

        answers.stream()
        .forEach(a-> System.out.println(String.format("%.2f",a)));
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함