JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, LV.0] 등수 매기기

sundori 2024. 12. 14. 17:21

목차

    문제 설명

    영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.


     

    제한사항

    • 0 ≤ score[0], score[1] ≤ 100
    • 1 ≤ score의 길이 ≤ 10
    • score의 원소 길이는 2입니다.
    • score는 중복된 원소를 갖지 않습니다.
    score result
    [[80, 70], [90, 50], [40, 70], [50, 80]] [1, 2, 4, 3]
    [[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] [4, 4, 6, 2, 2, 1, 7]
    import java.util.Arrays;
    
    class Solution {
        public int[] solution(int[][] score) {
            double[] avg_score = new double[score.length];
    
            int index = 0;
            for(int i = 0; i < score.length; i++){
                avg_score[i] = (score[i][0] + score[i][1]) / 2.0;
            }
    
    
            int[] rank = new int[score.length];
            Arrays.fill(rank, 1);
    
            // 순위 계산
            for (int i = 0; i < avg_score.length; i++) {
                for (int j = 0; j < avg_score.length; j++) {
                    if (avg_score[i] < avg_score[j]) {
                        rank[i]++; // 다른 학생의 점수가 더 높으면 순위를 증가
                    }
                }
            }
    
            return rank;
        }
    }

    이번 문제의 주의사항은 자료형에 있다.
    본인이 올바른 알고리즘을 사용하였지만 int형을 사용했다면 3번과 6번은 틀렸다고 나올 수 있다.

    이 문제는 각 구해진 학생들의 평점을 double형으로 저장하여 연산을 하여야지만 올바른 결과가 나온다.

     

    해당 문제에서 double을 사용해야 올바르게 맞다고 나오는 이유는 정수형 연산의 특성과 소수점 처리 차이 때문이다.

    정수 나눗셈 문제:

    • Java에서 두 정수의 나눗셈은 결과가 정수로 반환된다. 예를 들어:
    System.out.println(5 / 2); // 출력: 2

    정수와 double의 차이:

    • double을 사용하면 소수점까지 계산이 가능하다.
    System.out.println(5 / 2.0); // 출력: 2.5

    점수 순위 비교 문제:

    • 정수 나눗셈은 계산 과정에서 값이 동일하게 나오는 경우가 많다. 예를 들어:
    {80, 70} -> (80 + 70) / 2 = 75
    {81, 69} -> (81 + 69) / 2 = 75 // 실제 평균은 75.0, 75.0이 동일

     

    double을 사용하지 않으면 근소한 차이의 점수들도 동일한 순위로 처리될 가능성이 높아지고, 올바른 결과를 얻을 수 없다.

    • 정확한 비교를 위해 double 필요:
      • 순위 비교 시 정밀도가 필요한데, 정수 연산은 소수점 이하를 버리기 때문에 정확한 비교가 어렵다. double을 사용하면 값의 정확도가 유지되고 비교가 정확해진다.

     

    728x90