백준 1546 JAVA

백준 문제 1546

문제 설명



1. 총 데이터 수를 받습니다.

2. 각각의 점수가 입력됨 -> 한번에 입력됨.

이것을 활용하다 모든 점수를 score/M*100으로 하여 평균을 낸다면 정답이다.

문제 해결에 대한 걱정

1. 시간복잡도란?

에)

왜? 기껏해야 하나의 for 문만 사용되는 것 같습니다.

문제 해결 시작

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Backjon1546 {
    public static void main(String() args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        //총 수량
        int count = Integer.parseInt(br.readLine());
        String score = br.readLine();


        //한번에 일력받은 점수들 스페이스바로 구분이 되고 있다.
        StringTokenizer st = new StringTokenizer(score," ");

        List<Double> scoreNum = new ArrayList<>();

        //데이터 인입
        for (int i = 0; i < count; i++) {
            scoreNum.add(Double.parseDouble(st.nextToken()));
        }

        //실제 연산
        double result = scoreNum.stream()
                .mapToDouble(num -> num / (scoreNum.stream()
                                                     .mapToDouble(value -> value).max()
                                                     .orElse(-1)) * 100)
                .average().orElse(0.0);

        System.out.println(result);
    }
}

문제에 주석을 달았습니다.

여기서 내 문제의 핵심은

  1. List를 사용하여 문제를 해결했습니다.
  2. Stream을 사용하여 최대 값을 계산하고 평균을 계산했습니다.
  3. 스트림을 한방에 쓰려고 저렇게 썼는데 따로따로 표현하는게 좋은거같아요.

문제 해결

문제를 풀면서 모든 방법이나 자동 완성을 끄고 문제 풀이를 시작했는데 생각보다 어려운 것 같습니다.
조금 더 익숙해지도록 노력하겠습니다.