코딩테스트

[백준/JAVA] 1546 평균 (StringTokenizer 주의점)

코드사냥꾼 2021. 4. 29. 16:36

문제

 

해당 문제는 정말 별거 아닌 것 때문에 거의 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);
    }
}

 

 

www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

 

'코딩테스트' 카테고리의 다른 글

[백준/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