[프로그래머스 / Java] 전국 대회 선발 고사

Dreamer·2024년 2월 5일
post-thumbnail

문제

문제

n명의 학생 중 3명을 선발
참여 가능한 학생 && 등수가 높은 (AND 조건) = 3명 선발
int rank[] -> 학생들의 등수를 담은 배열
boolean attendance[] -> 참여 가능 여부를 담은 배열

선발 된 학생 ⭐번호⭐들을 등수가 높은 순서대로 a, b, c
return = (10000 * a) + (100 * b) + c

입출력 예시

나의 풀이

어떻게 풀지?
boolean배열에서 true인 index로 등수(rank[index])와 index를 저장
두 값을 저장해야 하니 Map으로 key값에 등수, value값에 index 저장
index를 꺼내서 사용해야하니 value로 넣어줌
key값 정렬 -> key값으로 value 가져오기

성공 인증

import java.util.*;
class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        
        Map<Integer, Integer> map = new HashMap<>();
        
        for (int i = 0; i < attendance.length; i++) {
            if (attendance[i] == true) {
                map.put(rank[i], i);
            }
        }
        
        Object[] mapKey = map.keySet().toArray();
        Arrays.sort(mapKey);
        
        int[] resultArr = new int[3];
        for (int i = 0; i < 3; i++) {
            resultArr[i] = map.get(mapKey[i]);
        }
        
        int a = resultArr[0];
        int b = resultArr[1];
        int c = resultArr[2];

        int result = (10000 * a) + (100 * b) + c;
        return result;  
        
    }
}

  • 다른 풀이 공부하기
profile
Moving forward based on records

0개의 댓글