https://www.acmicpc.net/problem/1546
오랜만에 StringTokenizer로 풀려니 약간 헤맸다.
- 점수를 배열에 저장한다음에
- 배열을 탐색하면서 최고 점수와 점수의 총합 구하고
- 총합*100/최고점수/과목의수를 계산하기
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main1546 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] score = new int[N];
for(int i=0;i<N;i++) {
score[i] = Integer.parseInt(st.nextToken());
}
System.out.println(solution(N, score));
}
public static Double solution(int N, int[] score) {
Double answer = 0.0;
long max = 0; // 최댓값
long sum = 0; // 점수 평균
for(int i=0;i<score.length;i++) {
if (max < score[i]) max = score[i];
sum += score[i];
}
// answer = (double) sum;
// return answer*100/max/N;
return sum*100.0/max/N;
}
}
- 옛날에 풀었던 문제를 보니 오름차순 정렬을 해서 최고점수를 구해서 풀었었다..!
- 총합*100/최고점수/과목의 수가 나온 이유는 (각 과목/최고점수*100)을 과목의 수 만큼 나누기 한 것과 같기 때문!(수학적지식..필요..)
- 주석처리된 부분 sum을 double형으로 바꿔주지 않아도, sum에 *100.0을 곱해주면 알아서 double형으로 변환..된다.(신기..)
새로운 풀이(updated by 23-11-23)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main1546 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int sum = 0;
int max = 0;
while (st.hasMoreTokens()) {
String token = st.nextToken();
int subjectValue = Integer.parseInt(token);
max = Math.max(max, subjectValue);
sum += subjectValue;
}
System.out.println(sum*100.0/max/N);
}
}
- for문 두 번 돌 필요 없이 그냥 st.hasMoreTokens( )로 while문 돌려서 안에서 int형으로 변환한 뒤에 값 구하기
- 처음에는 split으로 짤랐는데, 확실히 StringTokenizer 쓰니까 더 빨리 된다..
'algorithm > Baekjoon' 카테고리의 다른 글
Do it 알고리즘 코딩테스트 (0) | 2023.04.30 |
---|---|
[11720] 숫자의 합 (0) | 2023.04.30 |
[백준] 2750 수 정렬하기(Arrays.sort, 선택, 삽입, 퀵) (0) | 2022.10.13 |
[백준] 2908 상수 (0) | 2022.10.11 |
[백준] 1157 단어 공부 (0) | 2022.10.05 |