코테/프로그래머스

[프로그래머스/Lv. 0] 등수 매기기

imname1am 2023. 1. 31. 17:20
반응형

1차 코드 (오답)

class Solution {
    public int[] solution(int[][] score) {
        
        // 1. 평균값 구하기
        int[] answer = new int[score.length];
        
        for(int i=0 ; i<score.length ; i++) {
            for(int j=0 ; j<2 ; j++) {
                answer[i] += score[i][j];
            }
            answer[i] /= 2;
        }
        
        
        // 2. 등수 매기기
        int[] real = new int[answer.length];
        
        // 자신보다 작은 값이 있으면 순서 배열에 +1해서 순위 밀려남
        for(int i=0 ; i<real.length; i++) {
            for(int j=0 ; j<real.length ; j++) {
                if(answer[i] < answer[j]) {
                    real[i]++;
                }
            }
            
            // 순서 1부터 시작하게
            real[i]++;
        }
        
        return real;
    }
}

 

진료순서 정하기 문제랑 비슷한 줄 알고 비슷하게 풀었는디...

테스트 3,6에서 실패가 떴다...🤦‍♀️

 

 

그래서 질문하기를 다시 봤다...

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

반례를 봤고... 뭐 어떻게 해야할지 모르겠었다...

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

누가 풀이를 힌트에 올려주셨다.. (압도적 감사...🙏)

 

정답 코드

import java.util.Arrays;

class Solution {
    public int[] solution(int[][] score) {
        
        int[] answer = new int[score.length];
        Arrays.fill(answer,1);
        
        for(int i=0 ; i<score.length; i++) {
            for(int j=0 ; j<score.length ; j++) {
                if(score[i][0] + score[i][1] > score[j][0] + score[j][1]) {
                    answer[j]++; 
                }
            }
        }
        
        return answer;
    }
}

생각해보니 굳이 평균 구하고 있을 필요가 없었다...

어차피 합이 높을수록 평균도 높은 걸텐데...

 

그리고 Arrays.fill(answer, 1)을 해서 배열을 1로 다 채워줬고!!! (잊지 말자.. 배열 초기화 원하는 값으로 채우기)

그리고 작은 값에 +1해줘야 하니까 answer의 인덱스도 answer[i]가 아니라 answer[j]였던 것...

 

이리 간단한 것을 또 헤매고 있었다...😵

반응형