내가 푼 방법
BufferedReader 와 StringTokenizer 을 사용한 풀이이다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int C = Integer.parseInt(in.readLine()); // 테스트케이스의 개수C
StringTokenizer strTkn;
int[] student;
// [1] 학생수를 따로 받지 않고 점수랑 같이 Tokenizer 에서 한번에 받고 처리할때 구분한다
// 그리고 입력값 받는것 부터 반복문안에 들어가야 한다
for(int i=0; i<C; i++) {
strTkn = new StringTokenizer(in.readLine(), " ");
int N = Integer.parseInt(strTkn.nextToken()); // String 으로 반환되므로 Integer로 변환
student = new int[N];
// 성적 배열에 넣고 합구하기
double sum =0;
for(int j=0; j<N; j++) {
student[j] = Integer.parseInt(strTkn.nextToken());
sum += student[j];
}
// [2] 틀렸던 원인: 퍼센트를 표현하는 데 있어서 double 과 int의 차이
double smart = 0;
// 비교하기
for(int k=0; k<N; k++) {
if(student[k] > sum/N) smart++;
}
System.out.printf("%.3f%%%n",(smart/N)*100);
}
}
}
[2] 에서 틀린 이유)
평균 이상의 학생수를 담는 smart 를 int타입으로 하면
나중에 smart/N 에서 1 미만의 몫은 0으로 표현되므로 계속 0이 나온다
퍼센트는 실수에다가 100을 곱한 값이므로 실수가 표현되려면 smart 나 N을 double 타입으로 해줘야함
혹은 smart/N을 double 로 강제변환 할 수 도 있음
처음에 sum과 N 의 값은 제대로 나오는데 sum/N 의 값이 계속 0이 나와서
로컬변수와 전역변수를 사용하는 데 있어서 잘못된 부분이 있는 줄 알고 헤맸지만
결국에 타입의 문제였고 이번에 타입의 중요성을 다시 알게 되었다
'백준 풀이' 카테고리의 다른 글
[백준 풀이_Java] 5585 거스름돈 (0) | 2021.09.02 |
---|---|
[백준 풀이_Java] 15881 Pen Pineapple Apple Pen (0) | 2021.08.29 |
[백준 풀이_Java] 10870 피보나치수5 (0) | 2021.08.19 |
[백준 풀이_Java] 3460 이진수 (0) | 2021.08.18 |
[백준 풀이_Java] 11720 숫자의 합 (0) | 2021.08.17 |