프로그래밍/Algorithm

[프로그래머스] 명예의 전당 (1)

일단개그하다 2022. 11. 26. 16:33

문제

https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

프로그래머스

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

programmers.co.kr

접근 방법 및 풀이

상위 k번째 점수와 당일 노래의 점수와 비교하여 최저점의 목록을 반환해야 하므로 점수를 비교 할 목적의 배열을 k + 1 길이로 선언한 다음에 노래의 점수가 0점이 존재 하므로 0점을 고려하여 -1로 초기화

당일 노래의 점수를 0번째에 할당하고 오름차순으로 정렬하면 점수 비교 배열에서 1번째에서 k번째 사이에서 -1이 아닌 점수 중 가장 낮은 점수가 그 날의 명예의 전당의 가장 낮은 점수

import java.util.Arrays;

public class Q30_138477 {
    public int[] solution(int k, int[] score) {
        int length = score.length;

        int[] list = new int[k + 1];
        for (int i = 0; i < k + 1; i++) {
            list[i] = -1;
        }

        int[] answer = new int[length];

        for (int i = 0; i < length; i++) {
            int number = score[i];
            list[0] = number;
            Arrays.sort(list);
            answer[i] = getMinScore(list);
        }

        return answer;
    }

    /**
     * 1번째 이상에서 -1이 아닌 수에서 가장 빠른 인덱스의 값을 반환
     * 오름차순으로 정렬된 배열인 경우에는 -1이 아닌 가장 낮은 값을 반환하게 됨
     */
    public int getMinScore(int[] score) {
        int length = score.length;
        for (int i = 1; i < length; i++) {
            int number = score[i];
            if (number != -1) {
                return number;
            }
        }
        return 0;
    }
}