문제
해당 문제는 정말 별거 아닌 것 때문에 거의 20분을 잡아먹었다😂
바로, StringTokenizer 선언 때문이다. 나는 bufferedReader, bufferedWriter와 같은 클래스를 main메소드 상단에 위치시키는 습관이 있다. 따라서, StringTokenizer의 성격을 제대로 인지하지 못하고 같이 상단에 선언했더니 오류가 나버렸다.
StringTokenizer는 문자를 잘라 토큰 형식으로 저장할 변수 바로 위에 위치시켜야 한다는 것을 제대로 배우게 되었다...
풀이
소수점 아래 숫자도 나오게 출력해야하므로 과목 개수 변수를 제외한 모든 변수는 Double형으로 설정했다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 과목 개수
int num = Integer.parseInt(br.readLine());
// 과목 개수만큼 들어갈 점수 배열
double[] arr = new double[num];
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int i=0; i<arr.length; i++) {
arr[i] = Double.parseDouble(st.nextToken());
}
// 오름차순으로 배열 정렬
Arrays.sort(arr);
// 최대값
double max = arr[arr.length-1];
// 점수 저장할 값
double sum = 0;
for(int i=0; i<arr.length; i++) {
sum += ((arr[i]/max)*100);
}
System.out.print(sum/arr.length);
}
}
- 오류 발생 코드 (StringTokenizer 최상단 선언)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
// 과목 개수
int num = Integer.parseInt(br.readLine());
// 과목 개수만큼 들어갈 점수 배열
double[] arr = new double[num];
for(int i=0; i<arr.length; i++) {
arr[i] = Double.parseDouble(st.nextToken());
}
// 오름차순으로 배열 정렬
Arrays.sort(arr);
// 최대값
double max = arr[arr.length-1];
// 점수 저장할 값
double sum = 0;
for(int i=0; i<arr.length; i++) {
sum += ((arr[i]/max)*100);
}
System.out.print(sum/arr.length);
}
}
'코딩테스트' 카테고리의 다른 글
[백준/JAVA] 4344 평균 구하기 (0) | 2021.05.01 |
---|---|
[백준/JAVA] 8598 OX퀴즈 (0) | 2021.04.29 |
[백준/JAVA] 3052 나머지 (배열, Hashset 사용) (0) | 2021.04.29 |
[백준/JAVA] 2562 최댓값 (0) | 2021.04.28 |