문제: https://school.programmers.co.kr/learn/courses/30/lessons/138477
1. 코드
import java.util.*;
class Solution {
public int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
Stack <Integer> top = new Stack<>();
for(int i = 0; i < score.length; i++) {
if(i < k)
top.push(score[i]);
else if(top.peek() < score[i]) {
top.pop();
top.push(score[i]);
}
Collections.sort(top, Collections.reverseOrder());
answer[i] = top.peek();
}
return answer;
}
}
2. 설명
int[] answer = new int[score.length];
Stack <Integer> top = new Stack<>();
이 문제는 Stack을 활용하여 해결하는 게 깔끔하다고 느껴서 Stack을 사용하였습니다.
for(int i = 0; i < score.length; i++) {
if(i < k)
top.push(score[i]);
score의 길이 만큼 반복하여 k번은 일단 Stack에 push를 해줍니다.
else if(top.peek() < score[i]) {
top.pop();
top.push(score[i]);
}
k + 1번 부터는 Stack에 제일 위에 있는 것보다 점수가 크다면 pop을 한 뒤 해당 점수를 push 해줍니다.
Collections.sort(top, Collections.reverseOrder());
answer[i] = top.peek();
}
그 이유는 Stack을 내림차순으로 정렬했기에 제일 낮은 점수가 상위에 위치하기 때문입니다. 그리고 answer에 Stack에서 peek한 점수 즉, Stack 내에 가장 작은 점수를 저장합니다.
3. 정리
- Stack과 내림차순으로 쉽게 해결할 수 있다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 135808번: 과일 장수 [Java] (0) | 2023.07.25 |
---|---|
프로그래머스 - 1845번: 폰켓몬 [Java] (1) | 2023.07.24 |
프로그래머스 - 176963번: 추억 점수 [Java] (0) | 2023.07.22 |
프로그래머스 - 132267번: 콜라 문제 [Java] (0) | 2023.07.21 |
프로그래머스 - 142086번: 가장 가까운 같은 글자 [Java] (0) | 2023.07.20 |