반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
05-19 04:57
관리 메뉴

ImJay

[Softeer/Java] 6294. 평균 구하기 본문

알고리즘/소프티어

[Softeer/Java] 6294. 평균 구하기

ImJay 2024. 4. 30. 13:44
반응형

[Softeer/Java] 6294. 평균 구하기

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net


문제 해석

이 문제에서는 학생들의 점수 목록이 주어지고, 주어진 쿼리에 따라 특정 범위의 학생들 점수의 평균을 계산해야 한다. 각 쿼리는 시작 인덱스 𝑠와 종료 인덱스 𝑒를 포함하며, 이 범위에 포함된 학생들의 점수 평균을 출력한다. 문제에서 제공된 코드는 시작 인덱스를 1부터 계산하므로 입력 받을 때 인덱스 조정이 필요하다.

풀이 과정

제공된 코드는 입력 받은 점수 배열과 쿼리를 처리하여 평균을 계산하는 로직을 포함한다. 각 쿼리는 주어진 범위의 점수들을 합산하고, 범위의 길이로 나누어 평균을 구한다. 이 평균은 소수점 둘째 자리까지 출력해야 하므로 String.format을 사용하여 포맷팅한다.

코드

package edu.ssafy.im.SOF.No6294;

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

public class Main {
    private static int N, K;
    private static int[] score;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken()); // 학생 수
        K = Integer.parseInt(st.nextToken()); // 쿼리 수

        score = new int[N];
        st = new StringTokenizer(br.readLine()); // 점수 배열 입력
        for (int i=0; i<N; i++) {
            score[i] = Integer.parseInt(st.nextToken());
        }

        // 쿼리 처리
        for (int i=0; i<K; i++) {
            st = new StringTokenizer(br.readLine());
            sb.append(sol(Integer.parseInt(st.nextToken()) - 1, Integer.parseInt(st.nextToken()))).append("\n");
        }

        bw.write(sb.toString()); // 결과 출력
        bw.flush();
        bw.close();
    }

    // 평균 계산 함수
    private static String sol(int s, int e) {
        double sum = 0;
        for(int i = s; i < e; i++) {
            sum += score[i];
        }
        return String.format("%.2f", sum/(e-s)); // 소수점 둘째 자리까지 평균 출력
    }
}

시간 복잡도 분석

이 알고리즘은 각 쿼리마다 점수 배열의 일부를 순회하여 합을 계산하기 때문에, 시간 복잡도는 각 쿼리의 범위 𝑒−𝑠에 비례한다. 최악의 경우 𝑂(𝑁×𝐾)의 시간 복잡도를 가질 수 있다.

느낀점

이 문제를 통해 입력과 출력 처리, 문자열 파싱, 그리고 범위에 따른 평균 계산 방법을 복습할 수 있었다. 실제 코딩 테스트 환경에서는 입력과 출력 처리에 유의해야 하며, 정확하고 효율적인 코드 작성이 중요하다는 것을 다시 한번 인식하게 되었다.

반응형

'알고리즘 > 소프티어' 카테고리의 다른 글

[Softeer/Java] 6248. 출퇴근길  (1) 2024.05.01
[Softeer/Java] 6293. 징검다리  (1) 2024.05.01
Comments