본문 바로가기
Coding Test/Programmers

[프로그래머스] 명예의전당(Lv1) - Java

by lucas_owner 2022. 12. 8.

문제

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

 

프로그래머스

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

programmers.co.kr


문제 분석 & 이해

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)

반응형

댓글