개인공부-3

박상훈·2023년 4월 7일
0

개인공부

목록 보기
3/16

프로그래머스 Level -1 (명예의 전당)

  • K = 명예의 전당에 오를 수 있는 점수 갯수
  • scores[] = 일자 별 점수기록 자 ( 10점..100점...20점..150점...)

틀린 접근

  • 당연하게 K보다 scores[] 가 더 많을 것으로 생각 -> 먼저 k 만큼 담으면서, 최소 점수를 담아서
    해결 할 생각을 했었음.
  • 하지만 K 보다 scores[]가 더 클 수 있다는 경우가 있었음 -> 명예의 전당 빈자리보다 점수 받은 사람이 더 적은것..!

풀이

  • k가 scores보다 클 때 , 작을 때를 나누어 작업했지만 코드도 길고 비효율적인 코드를 짰음.
  • 매번 sort()하여 첫번 째가 가장 작을테니 그 것을 담아서 리턴하는 방식 사용.

참신했던 풀이와 배운점

  • 우선순위 큐 PriotryQueue<>를 사용한 풀이가 가장 기억이 남는다.
  • 큐에 넣을 때 마다 우선 순위가 가장 높은 것이 첫번 째로 올라가므로, 쭉 넣으면서 peek()하여 최소 값을 담아주다가 q.size()가 k보다 커지면 우선순위가 가장높은 첫번째(가장 작은 점수)를 빼고 새로 추가한다. 그 후 q.peek()를 사용하면 또 가장 작은 점수를 반환 할 수 있었음...

우선 순위 큐 사용

import java.util.PriorityQueue;
import java.util.Collections;

//낮은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueLowest = new PriorityQueue<>();

//높은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueHighest = new PriorityQueue<>(Collections.reverseOrder());
profile
기록하는 습관

0개의 댓글