본문 바로가기
개발로그/알고리즘

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

by 쩜징 2023. 7. 17.

프로그래머스 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;
    }
}

반응형

댓글