관리 메뉴

100세까지 코딩

[프로그래머스] Lv0.전국 대회 선발 고사 본문

코딩테스트/자바

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

100세까지 코딩 2023. 9. 1. 23:43
문제 설명

풀기 전 생각
  • 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로 가자!!