프로그래머스 Lv.0 전국 대회 선발 고사

0번부터 n-1번까지 n명의 학생 중 등수가 높은 3명을 선발한다.
단, 전국 대회에 참여할 수 있는 학생만 포함시킨다.
각 학생들의 선발 고사 등수를 담은 정수 배열 rank[ ]
전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance[ ]이 주어진다.
등수가 높은 순서대로 각각 a, b, c번이라고 할 때
10000 x a + 100 x b + c 를 return하라.
**풀이 방법
TreeMap으로 key=순위, value=인덱스값을 저장한다.
※ TreeMap을 사용하면 기본적으로 오름차순 정렬이 된다.
(왼쪽 노드-루트 노드-오른쪽 노드)
TreeMap<Integer,Integer> map = new TreeMap<>();
for (int i=0; i<rank.length; i++) {
if (attendance[i]) {
map.put(rank[i], i);
}
}
Entry를 이용해서 TreeMap에 저장된 키와 값들에 접근한다.
ArrayList를 생성해서 높은 순위의 인덱스를 저장한다.
List<Integer> r = new ArrayList<>();
for (Map.Entry<Integer, Integer> pair : map.entrySet()) {
r.add(pair.getValue());
}
순위가 높은 3개만 계산할 것이므로
10000 * r.get(0) + 100 * r.get(1) + r.get(2)를
answer에 대입한다.
answer = 10000 * r.get(0) + 100 * r.get(1) + r.get(2);
<> 전체 코드 </>
import java.util.*;
class Solution {
public long solution(int[] rank, boolean[] attendance) {
long answer = 0;
TreeMap<Integer,Integer> map = new TreeMap<>();
List<Integer> r = new ArrayList<>();
for (int i=0; i<rank.length; i++) {
if (attendance[i]) {
map.put(rank[i], i);
}
}
for (Map.Entry<Integer, Integer> pair : map.entrySet()) {
r.add(pair.getValue());
}
answer = 10000 * r.get(0) + 100 * r.get(1) + r.get(2);
return answer;
}
}
반응형
'개발로그 > 알고리즘' 카테고리의 다른 글
프로그래머스 Lv.0 다음에 올 숫자 (0) | 2023.07.19 |
---|---|
프로그래머스 Lv.0 리스트 자르기 (0) | 2023.07.17 |
프로그래머스 Lv.0 이진수 더하기 (0) | 2023.07.15 |
프로그래머스 Lv.0 외계행성의 나이 (0) | 2023.07.14 |
프로그래머스 Lv.0 한 번만 등장한 문자 (0) | 2023.07.13 |
댓글