코테

백준 1546 JAVA

SigLee0505 2023. 4. 18. 06:00

백준 문제 1546

문제 설명

1. 총 데이터 숫자를 입력 받는다.

2. 각각의 점수를입렵 받는다 -> 이를 한번에 입력 받고 있다.

이를 활용해서 모든 점수를 점수/M*100 를 만든다음 평균을 내면 정답

문제 해결 위한 고민

1. 시간 복잡도는 어떻게 되는가?

O(n)

Why? 많아봐야 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. Stream을 한방에 쓰고자 저렇게 사용했는데 이를 따로 표현하는 것도 좋아보인다.

문제 풀이

문제를 풀면서 모든 메서드나 쟈동 완성 기능을 끄고 문제를 풀기 시작했는데 생각보다 어려운 것 같다.
조금더 익숙해지기 위해 노력해야겠다.

'코테' 카테고리의 다른 글

백준 1697  (0) 2023.05.04
백준 7569  (0) 2023.05.04
백준 4949 java  (0) 2023.04.19
백준 10828 스택 구현하기  (0) 2023.04.18
백준 11720 JAVA  (0) 2023.04.18