100세까지 코딩
[프로그래머스] Lv0.전국 대회 선발 고사 본문
문제 설명
풀기 전 생각
- attedance가 true인 학생들의 index값(번호)을 배열리스트에 저장하기
- 2차원 배열을 만들어 등수와 번호를 함께 저장
- 등수를 기준으로 오름차순 정렬하여 top 3명의 번호를 구하기
class Solution {
public int solution(int[] rank, boolean[] attendance) {
ArrayList<Integer> arr = new ArrayList<Integer>();
int answer = 0;
for(int i = 0; i < rank.length;i++){
if(attendance[i]){ // true면
arr.add(i); // index값을 넣어줌
}
}
int[][] rankArray = new int[arr.size()][arr.size()]; // 2차원 배열만듬
for(int i = 0 ; i < arr.size();i++){
rankArray[i][0] = rank[arr.get(i)]; // 등수(rank)를 등록
rankArray[i][1] = arr.get(i); // 번호를 등록
}
Arrays.sort(rankArray, (o1, o2) -> {
return o1[0]-o2[0]; // 첫번째 숫자 기준 오름차순 정리
});
answer = 10000 * rankArray[0][1] + 100 * rankArray[1][1] + rankArray[2][1];
return answer;
}
}
모범 답안
class Solution2 {
public int solution(int[] rank, boolean[] attendance) {
PriorityQueue<Integer> que = new PriorityQueue<>((a, b) -> rank[a] - rank[b]);
for (int i = 0; i < attendance.length; i++) {
if (attendance[i])
que.add(i);
}
return que.poll() * 10000 + que.poll() * 100 + que.poll();
}
}
우선순위 큐를 사용하여 등수를 기준으로 우선순위를 부여했다.
람다함수를 사용하여 간략하게 표현하였다.
컬렉션 공부하고 Lv1로 가자!!
'코딩테스트 > 자바' 카테고리의 다른 글
[do it 알고리즘] 백준 1546 (배열과 리스트) (0) | 2023.09.19 |
---|---|
[do it 알고리즘] 백준 11720 (배열과 리스트) (0) | 2023.09.17 |
[프로그래머스] Lv0.특이한 정렬 (0) | 2023.08.31 |
[프로그래머스] Lv0.배열 만들기 2 (0) | 2023.08.29 |
[프로그래머스] Lv0.저주의 숫자 3 (0) | 2023.08.27 |