반응형
프로그래머스 programmers Level1 명예의 전당 (1) - java 자바
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/138477
[풀이]
점수가 상위 k 번째 이내일때 명예의 전당 점수표에 기재한다.
문제에도 제시되어있듯 k 번째 날까지는 명예의 전당에 기재된다.
- 리턴할 배열은 score.length 로 초기화한다.
- 명예의 전당이 될 List 를 선언한다. List<Integer> kList
- 점수표 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;
}
반응형