일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 달빛클럽 1기
- Array
- 자바
- 경제공부
- ReactJS로 영화 웹 서비스 만들기
- 노마드코더 강의
- 달빛캠퍼스
- 노마드코더
- SoftwareExpertAcademy
- BOJ
- Java
- 달빛클럽
- 재귀
- 완전탐색
- SWEA
- React
- HashMap
- 인플레이션에서 살아남기
- 프로그래머스
- Algorithm
- 카카오블라인드코딩테스트
- JPA
- 알고리즘
- programmers
- dfs
- 리액트
- React.js
- 달빛클럽1기
- Stack
- 백준
- Today
- Total
th42500의 TIL
[Java] 연습문제 - 명예의 전당 (1) (Lv 1) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/138477
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예
💡 포인트
1️⃣ 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 K번째 이내이면 해당 가수의 점수를 명예의 전당에 올림
👉 새로운 점수가 들어올 때마다 정렬이 필요함 = 우선순위 큐
👉 상위 K번째 이내일 때만 명예의 전당에 새로운 점수 추가
❓ 풀이 방법
1️⃣ 최하위 점수(정답)를 담을 int형 배열과 명예의 전당 리스트를 담을 우선순위 큐 선언
2️⃣ for문을 score의 길이만큼 반복
👉 우선순위 큐(명예의 전당 리스트)의 길이가 k보다 작다면 score[i]를 추가만 함
👉 우선순위 큐가 k 이상이고 score[i]가 pq.peek() 즉, 가장 작은 수보다 클 경우에만 pq.poll()을 하고 새로운 점수를 추가 해줌
3️⃣ 매 반복문을 실행할 때마다 answer 배열에 pq.peek() 값 담아주기
❗ 테스트 결과
👉 통과
✔ 소스코드
package com.likelion.programmers;
import java.util.Arrays;
import java.util.PriorityQueue;
public class Solution { // 명예의 전당
private int[] solution(int k, int[] score) {
int[] answer = new int[score.length];
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i = 0; i < score.length; i++) {
if(pq.size() < k) {
pq.offer(score[i]);
}else if(score[i] > pq.peek()) {
pq.poll();
pq.offer(score[i]);
}
answer[i] = pq.peek();
}
return answer;
}
public static void main(String[] args) {
Solution main = new Solution();
int k = 3;
int[] score = new int[]{10, 100, 20, 150, 1, 100, 200};
System.out.println(Arrays.toString(main.solution(k, score)));
}
}
우선순위 큐를 한번에 생각해냈다면 간단하게 풀 수 있었던 문제였던 것 같다.😁
이번 문제는 쉬운 문제였지만, 전에는 이런 문제를 보고도 우선순위 큐를 생각하지 못했었는데 이제는 한번에 생각해냈다는 점에서 알고리즘과 자료구조에 조금은 익숙해진 나의 성장을 확인할 수 있었던 기회였다.
'Algorithm > Programmers' 카테고리의 다른 글
[Java] Summer/Winter Coding(~2018) - 배달 (Lv 2) (0) | 2022.12.16 |
---|---|
[Java] 연습문제 - 제일 작은 수 제거하기 (Lv 1) (0) | 2022.12.16 |
[Java] 연습문제 - 숫자 카드 나누기(Lv 2) (0) | 2022.11.22 |
[Java] 2018 KAKAO BLIND RECRUITMENT - [1차] 비밀지도 (feat. StringIndexOutOfBoundsException) (Lv 1) (0) | 2022.11.11 |
[Java] 깊이/너비 우선 탐색(DFS/BFS) - 여행경로 (Lv3) (0) | 2022.10.09 |