[백준] 16462번 - '나교수' 교수님의 악필 by Java(자바)

윤소영·2022년 2월 8일
0

백준

목록 보기
5/13

✨ 문제

백준 16462번

🔻 문제

✨ 풀이

📚 핵심 포인트

📍 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개만 존재한다면 그것을 출력하면 된다는 말이다!! 그래서 호다닥 고쳐서 냈다는 말,,,

profile
Major in IT Engineering(2021.03~)

0개의 댓글