
내가 작성한 코드
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