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

반응형

프로그래머스 programmers Level1 명예의 전당 (1) - java 자바

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

[풀이]

점수가 상위 k 번째 이내일때 명예의 전당 점수표에 기재한다.

문제에도 제시되어있듯 k 번째 날까지는 명예의 전당에 기재된다.

 

  1. 리턴할 배열은 score.length 로 초기화한다.
  2. 명예의 전당이 될 List 를 선언한다. List<Integer> kList
  3. 점수표 score 를 for문으로 루프돌려서 명예의 전당에 기재할지 판단한다.
    3.1. 명예의전당 kList 의 개수가 k개 미만이면 명예의 전당에 점수를 추가한다.
    3.2. 명예의전당 kList 의 개수가 k개 인 경우
        3.2.1. 현재 명예의 전당 최소 점수 < 점수이면, 명예의 전당에 기재한다.
        3.2.2. 현재 명예의 전당 최소 점수 >= 점수이면, 명예의 전당에 기재하지 않는다.

 

[java 코드]

/**
* 명예의 전당 (1)
* @param k 상위 k 번째 이내일때 점수표에 기재
* @param score 점수표
* @return 최저점 배열
*/
public int[] solution(int k, int[] score) {
    int[] answer = new int[score.length];
    List<Integer> kList = new ArrayList<>();
    int minValue = 0;
    int idx = 0;
    for (int i = 0; i < score.length; i++) {
    // 명예의 전당에는 상위 k 번째까지
    if (kList.size() == k) {
       if (minValue < score[i]) {
          kList.remove(idx);
          kList.add(score[i]);
       }
    } else {
       // 명예의 전당이 k개에 미달하면 추가
       kList.add(score[i]);
    }
    // 명예의 전당 상위 k 개 중 최소값
    minValue = Collections.min(kList);
    idx = kList.indexOf(minValue);
    // 매일 최소점수 추가
    answer[i] = minValue;
    }
    return answer;
}
반응형