프로그래머스 등수 매기기

KIMYEONGJUN·2026년 9월 20일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

score.length를 통해 전체 학생 수가 몇 명인지 파악한다.
최종 등수들을 담아둘 크기가 n인 정수 배열 answer를 생성한다.
반복문을 돌며 각 학생의 영어 점수(score[i][0])와 수학 점수(score[i][1])를 더한 뒤 2.0으로 나누어 평균을 구한다.
소수점이 유실되지 않도록 double 타입의 avgs 배열에 각각 저장한다.
바깥쪽 반복문은 현재 등수를 확인할 '나'를 뜻하고, 안쪽 반복문은 비교 대상이 되는 '모든 친구들'을 뜻한다.
내 등수의 기본값을 1등으로 설정하고 시작한다.
교실 안에 있는 다른 친구의 평균(avgs[j])이 내 평균(avgs[i])보다 높다면 나보다 공부를 잘하는 사람이므로 내 등수를 한 칸 뒤로 밀어내기 위해 rank++를 실행한다.
모든 친구들과의 비교가 끝나면 완성된 내 등수를 answer[i]에 집어넣는다.
모든 학생의 등수가 차곡차곡 담긴 answer 배열을 최종적으로 반환한다.

코드로 구현

class Solution {
    public int[] solution(int[][] score) {
        int n = score.length;
        int[] answer = new int[n];
        
        double[] avgs = new double[n];
        for (int i = 0; i < n; i++) {
            avgs[i] = (score[i][0] + score[i][1]) / 2.0;
        }
        
        for (int i = 0; i < n; i++) {
            int rank = 1;
            for (int j = 0; j < n; j++) {
                if (avgs[i] < avgs[j]) {
                    rank++;
                }
            }
            answer[i] = rank;
        }
        
        return answer;
    }
}

프로그래머스 코드

package programmers.programmers2;

import java.util.Arrays;

// 프로그래머스 등수 매기기
public class Main149 {
    public static void main(String[] args) {
        Solution sol = new Solution();

        // 첫 번째 입출력 예
        int[][] score1 = {{80, 70}, {90, 50}, {40, 70}, {50, 80}};
        int[] result1 = sol.solution(score1);
        System.out.println(Arrays.toString(result1)); // 예상: [1, 2, 4, 3]

        // 두 번째 입출력 예
        int[][] score2 = {{80, 70}, {70, 80}, {30, 50}, {90, 100}, {100, 90}, {100, 100}, {10, 30}};
        int[] result2 = sol.solution(score2);
        System.out.println(Arrays.toString(result2)); // 예상: [4, 4, 6, 2, 2, 1, 7]
    }

    static class Solution {
        public int[] solution(int[][] score) {
            int n = score.length;
            int[] answer = new int[n];

            double[] avgs = new double[n];
            for (int i = 0; i < n; i++) {
                avgs[i] = (score[i][0] + score[i][1]) / 2.0;
            }

            for (int i = 0; i < n; i++) {
                int rank = 1;
                for (int j = 0; j < n; j++) {
                    if (avgs[i] < avgs[j]) {
                        rank++;
                    }
                }
                answer[i] = rank;
            }

            return answer;
        }
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글