🔻 문제
📍 1) 0, 6을 9로 바꿨을 때 100이 넘는 경우는 100점으로 처리한다.
0, 6을 9로 바꿨을 때 100이 넘는 경우는 딱 한 경우 100밖에 없다.
👉🏻 따라서 나교수 교수님이 적으신 학생들의 성적 점수를 하나씩 토큰으로 분리할 때 제일 먼저 Integer.parseInt()로 바꿔 100인지 확인하고 맞으면 평균 점수를 구할 avg에 100을 더하고, 아니면 0과 6을 9로 바꾸는 과정을 진행한다.
📍 2) 0과 6을 9로 바꾼다.
문자열로 입력받고 replace() 메서드를 사용해 0, 6을 9로 바꾼다.
👉🏻 replace() 메서드 설명 - w3schools
📍 3) 평균 성적과 가장 가까운 "정수"를 출력한다.
평균 성적은 실수가 될 수 있다는 것 항상 기억하기!
👉🏻 실수일 가능성이 높은 평균 성적에서 가장 가까운 정수를 구하기 위해서는 반올림을 해야 한다.
📍 4) 그런 정수가 여러 개라면 그 중 가장 큰 것을 출력한다.**
이러한 경우는 평균 점수가 90.5, 98.5, ... 처럼 0.5로 떨어져 가장 가까운 정수가 두 개 나타나는 것이다. 이러한 경우 가장 큰 것을 출력해야 한다는 말이다.
👉🏻 이 말은 헷갈리기 쉬운데 그냥 3)과 같이 반올림 함수를 사용하면 된다. 자바나 자바스크립트의 경우 반올림 함수 Math.round는 0.5일 경우 올림을 하기 때문이다.
👉🏻 파이썬 반올림의 경우 3.5는 4가 4.5는 4가 된다고 알고 있다! 즉, 소수점을 버린 숫자가 홀수이면 올림을, 짝수이면 내림을 하는 것이다.
👉🏻 다른 언어도 반올림할 때 자바와는 다른 방법이 존재하는 것 같으니! 각자가 사용하는 언어에 따라 구현하면 될 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
double avg = 0.0;
for(int i = 0; i < N; i++){
String str = br.readLine();
if(Integer.parseInt(str) == 100){
avg += 100;
} else{
str = str.replace("0", "9");
str = str.replace("6", "9");
avg += Integer.parseInt(str);
}
}
avg = avg / (double) N;
System.out.println((int) Math.round(avg));
}
}
맨 처음에는 핵심 포인트 3, 4번 부분에서 Math.ceil를 사용해 올림을 해줘서 틀렸다. 다시 보니 평균 성적과 가장 가까운 정수고, 만약 가장 가까운 정수가 여러 개라면 그 중 큰 것을 선택하는 것이었다. 즉, 만약 가장 가까운 정수가 1개만 존재한다면 그것을 출력하면 된다는 말이다!! 그래서 호다닥 고쳐서 냈다는 말,,,