문제
https://school.programmers.co.kr/learn/courses/30/lessons/138477
문제 분석 & 이해
1. 매일 한명의 가수가 노래를 부르고 점수를 받는다.
2. 명예의 전당에는 k 만큼 리스트업 된다.
3. k 이후 부터는 k 번째 가수보다 점수가 높다면 -> k번째 가수는 리스트 삭제. 그리고 점수 순서로 list up
4. 매일 최하위 점수를 발표한다. -> 배열로 발표점수를 return.(해답.)
- 처음 풀이를 진행 했을때는 ArrayList를 통해서 k 만큼의 요소를 add 한 후에 정렬,
그리고 if 조건문에 따라 최저 랭킹이 정렬 되어 있는 리스트에 set (k일차가 점수가 높다면)
결과에 추가 시키는 방법으로 접근을 했다.
- Refactoring
하지만 java의 '우선순위 큐' 를 사용하면 코드가 간결해지고 복잡한 연산을 하지 않아도 되었다 ......
* 우선순위 큐에는 높은숫자, 낮은숫자 2가지로 처리가 가능하다!
-> 우선순위가 중요한 상황일 때 사용하는것이 유용해보였다.
입출력 예시
k | score | result |
3 | [10, 100, 20, 150, 1, 100, 200] | [10, 10, 10, 20, 20, 100, 100] |
4 | [0, 300, 40, 300, 20, 70, 150, 50, 500, 1000] | [0, 0, 0, 0, 20, 40, 70, 70, 150, 300] |
Solution
Refactoring
처음 생각했던 코드의 절반이 되었다....
틀린점이나 수정할 부분, 혹은 더 좋은 솔루션 공유는 언제든 환영입니다!!!
댓글에 자유롭게 말씀해주세요~
출처 : 프로그래머스(programmers)
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 나머지 한점(알고리즘) - Java (2) | 2022.12.12 |
---|---|
[프로그래머스] 최대공약수와 최대공배수(Lv1) - Java (0) | 2022.12.11 |
[프로그래머스] 문자열나누기(Lv1) - Java (0) | 2022.12.07 |
댓글