백준 문제 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);
}
}
문제에 주석을 달았습니다.
여기서 내 문제의 핵심은
- List를 사용하여 문제를 해결했습니다.
- Stream을 사용하여 최대 값을 계산하고 평균을 계산했습니다.
- 스트림을 한방에 쓰려고 저렇게 썼는데 따로따로 표현하는게 좋은거같아요.
문제 해결
문제를 풀면서 모든 방법이나 자동 완성을 끄고 문제 풀이를 시작했는데 생각보다 어려운 것 같습니다.
조금 더 익숙해지도록 노력하겠습니다.