PS
[자바] 프로그래머스 - 명예의 전당 (1) / 구현 문제 Stream 풀이
제이._
2022. 11. 25. 19:13
https://school.programmers.co.kr/learn/courses/30/lessons/138477
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 1, 정답률 38%의 신규 문제입니다.
문제 자체는 쉬우나, 완료자가 많이 없어서 아직은 정답률이 낮아보입니다.
문제 분석
문제에서 주어진 예시입니다.
저희가 구해야 하는 것들은 모든 일차 별 발표 점수를 구해야합니다.
먼저 명예의 전당에 오를 수 있는 값들의 개수는 k개입니다. 여기에 오를 수 있는 점수는 모든 점수 중 상위 k개입니다.
발표 점수 계산은 명예의 전당에 올라가있는 k개의 값들 중 가장 낮은 값으로 선정됩니다.
어떻게 접근하고 풀이할지
문제 풀이를 위해서 우리는 두 가지를 해야 합니다.
1. 명예의 전당에 score[i] 추가하기
2. 내림차순 정렬 후 상위 k개만큼 값 저장하기
3. 명예의 전당에서 가장 낮은 값을 가진 변수를 answer(발표 점수)에 추가해주기
이렇게 구현하기 위해 List로 빡구현 하는 방법과, PriorityQueue로 구현하는 방법을 생각했습니다.
하지만 더 간단하게 풀기 위해서 Stream을 적용해서 풀어봤습니다.
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
static public List<Integer> solution(int k, int[] score) {
List<Integer> answer = new ArrayList<>();
List<Integer> scoreList = new ArrayList<>();
for (int i = 0; i < score.length; i++) {
scoreList.add(score[i]);
scoreList = scoreList.stream()
.sorted(Comparator.reverseOrder()) // 내림차순
.limit(k) // 상위 k개 추출
.collect(Collectors.toList());
answer.add(scoreList.get(scoreList.size() - 1));
}
return answer;
}
}