본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / 명예의 전당 (1) / JAVA]

by KDW999 2023. 1. 13.

https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근

배열보단 값 저장, 변경에 ArrayList가 나을 거 같아서 사용

ㅡ score.length 길이 만큼 돌아가는 반복문 

ㅡ 명예의 전당이 꽉 차기 전까진(명전 사이즈 < k) 점수를 바로 명전에다가 저장

Collections.sort() → List 오름차순 정렬 해주는 메서드

ㅡ 오름차순 정렬되면 0번 인덱스가 제일 작은 값 → answer에 저장

ㅡ 명전이 꽉 차면 ( else ) 0번 인덱스가 현재 점수보다 작을 경우 값만 변경해주고 다시 정렬 → 정렬 후 0번 인덱스에 최저값

 import java.util.*;
 
 public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];
        ArrayList<Integer> hallFame = new ArrayList<>();

        for(int i=0; i<score.length; i++) {
        	
        	if(hallFame.size() < k) {
        		hallFame.add(score[i]);
        		Collections.sort(hallFame); // 오름차순 정리하면 0번 인덱스가 제일 작은 수
        		answer[i] = hallFame.get(0);
        	}
        	else {
        		if(hallFame.get(0) < score[i]) {
        			hallFame.set(0, score[i]);
        			Collections.sort(hallFame);
        		}
        		answer[i] = hallFame.get(0);
        	}
        }
        return answer;
    }
}

댓글