반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

개발 쥬스

[프로그래머스/Java] 181851 전국 대회 선발 고사 본문

알고리즘

[프로그래머스/Java] 181851 전국 대회 선발 고사

DevJuice 2024. 11. 14. 16:28
반응형

🔗 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181851

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

🔍  해결 과정

참석가능한 학생 중에서 rank가 높은 순으로 3명을 선택한 다음 그 학생들의 번호를 바탕으로 문제에서 요구하는 값을 계산해야합니다.

단순히 랭캥이 1, 2, 3등이 아닌 참석 가능한 학생 중에서 랭크 상위별로 학생 3명의 번호를 추려내야 하는 문제이기 때문에 이 문제는 우선순위 큐 자료구조를 활용하여 문제를 해결할 수 있습니다.

과정은 다음과 같습니다

1️⃣ Java PriorityQueue에서 Comparator를 활용하여 랭크가 높은(랭크 번호가 낮은)학생들을 우선으로 하는 학생들의 번호를 담을 우선순위 큐 자료구조를 만든다.
2️⃣ 문제의 attendance에서 참석 가능한 학생이면 그 학생의 번호를 우선순위 큐에 담는다.
3️⃣ 우선순위 큐에서 세 명의 학생 번호를 뽑아 문제의 답을 도출한다.

 

 


✏️ 코드

import java.util.*;

class Solution {
    
    public int solution(int[] rank, boolean[] attendance) {
        int answer = 0;
        int len = rank.length;
        
        Queue<Integer> q = new PriorityQueue<>(new Comparator<Integer>() {
            
            @Override
            public int compare(Integer o1, Integer o2) {
                return rank[o1] - rank[o2];
            }
            
        });
            
        for (int i = 0; i < len; ++i) {
            if (attendance[i]) {
                q.offer(i);
            }
        }
        
        return q.poll() * 10000 + q.poll() * 100 + q.poll();
    }
}
반응형