[JAVA 문제 풀이] 191. 전국 대회 선발 고사

프로그래머스 (181851)
Stupefyee's avatar
Apr 10, 2025
[JAVA 문제 풀이] 191. 전국 대회 선발 고사
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public int solution(int[] rank, boolean[] attendance) { List<Integer> list = new ArrayList<>(); // 참여자의 원소만 담을 리스트 // 참여자만 담기 for (int i = 0; i < rank.length; i++) { if (attendance[i]) { list.add(rank[i]); } } Collections.sort(list); // 정렬 // 정렬된 리스트의 값이 rank 배열의 원소와 같을 때 리스트의 값을 rank 배열의 인덱스로 변환 for(int i = 0; i < list.size(); i++){ for(int j = 0; j < rank.length; j++){ if(list.get(i) == rank[j]){ list.set(i, j); break; } } } return 10000 * list.get(0) + 100 * list.get(1) + list.get(2); } }

내가 작성한 코드 변형

import java.util.*; class Solution { public int solution(int[] rank, boolean[] attendance) { List<int[]> list = new ArrayList<>(); for (int i = 0; i < rank.length; i++) { if (attendance[i]) { list.add(new int[]{rank[i], i}); // [순위, 인덱스] } } // 순위 기준 정렬 list.sort(Comparator.comparingInt(a -> a[0])); // 상위 3명의 인덱스를 가져와 공식에 대입 return 10000 * list.get(0)[1] + 100 * list.get(1)[1] + list.get(2)[1]; } }
  • 인트배열을 리스트로 담기 → 리스트 값을 변환하는 과정 넘기기 가능
 

다른 사람의 코드

import java.util.PriorityQueue; class Solution { public int solution(int[] rank, boolean[] attendance) { // 인덱스를 저장하는 우선순위 큐 생성 (rank 기준 오름차순 정렬) PriorityQueue<Integer> que = new PriorityQueue<>((a, b) -> rank[a] - rank[b]); // attendance가 true인 학생의 인덱스만 큐에 추가 for (int i = 0; i < attendance.length; i++) { if (attendance[i]) que.add(i); // 우선순위 큐에 참석한 학생 인덱스 추가 } // 가장 높은 순위(작은 rank값)의 인덱스 3개를 꺼내 계산 return que.poll() * 10000 + que.poll() * 100 + que.poll(); } }
  • PriorityQueue
    • 우선순위가 높은 요소가 먼저 나오는 큐
    • 일반적인 큐의 방식(FIFO)와 달리 정렬 기준을 설정 가능
Share article

stupefyee