Etc/알고리즘

[softeer] 6294

jjuni_96 2024. 8. 2. 23:13
728x90

문제

 

제약조건

 

 

메모리 제약

 

입/출력

 

 

문제 분석

단순 연산 문제!

1. 값 입력
2. 구간 내에 범위 계산
3. 반올림 이후 두자리 포멧으로 출력

 

풀이 1

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

public class Main {

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

        String[] input = bf.readLine().split(" ");
//        int people = Integer.parseInt(input[0]);
        int gugan = Integer.parseInt(input[1]);

        String[] records = bf.readLine().split(" ");

        for (int i = 0; i < gugan; i++) {
            String[] findGugan = bf.readLine().split(" ");
            int start = Integer.parseInt(findGugan[0])-1;
            int end = Integer.parseInt(findGugan[1])-1;

            int sum = 0;
            for (int j = start; j <= end; j++) {
                sum += Integer.parseInt(records[j]);
            }
            double avg = (double) sum/(end-start+1);
            int avgInt = (int) (avg*1000);
            // 두번째자리 반올림
            System.out.printf("%.2f\r\n", avgInt/1000.0);
        }
    }
}

 

실패

시간초과.....?

시간을 찍어보니까 3가지 구간을 푸는데 대략 1.9초가 걸렸다...
아마 이중 for문에서 형변환이 큰 부담을 차지하는 것으로 예상 후 구간 값을 double로 변경 후 제출

 

풀이

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

public class Main {

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

        String[] input = bf.readLine().split(" ");
        int gugan = Integer.parseInt(input[1]);
        double[] records = Arrays.stream(bf.readLine().split(" ")).mapToDouble(Double::new).toArray();

        for (int i = 0; i < gugan; i++) {
            String[] findGugan = bf.readLine().split(" ");
            int start = Integer.parseInt(findGugan[0])-1;
            int end = Integer.parseInt(findGugan[1])-1;

            double sum = 0;
            for (int j = start; j <= end; j++) {
                sum += records[j];
            }
            double avg = sum/(end-start+1);
            int avgInt = (int) (avg*1000);
            // 두번째자리 반올림
            System.out.printf("%.2f\r\n", avgInt/1000.0);
        }
    }
}

 

성공

 

링크

https://softeer.ai/practice/6294

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

728x90
반응형
LIST