Algorithms/프로그래머스

[프로그래머스] '진료 순서 정하기' - Java

LEFT 2023. 4. 27. 13:53

<문제 제시>

<문제설명>
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 
정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 
return하도록 solution 함수를 완성해주세요.

<예시 입출력>


<문제 해결 과정>

처음에는 응급도 배열에서 최소값을 [0]번째 인덱스 값으로 초기화 후 rank를 부여하며 찾고자 하였다.

Try 1)

// 오답

int min = Integer.MIN_VALUE;
min = emergency[0];

// 순위의 최대값 = emergency 배열의 길이
int rank = emergency.length;

for(int i = 0; i < rank; i++){

    // emergency가 min보다 작다면
    if(min > emergency[i]){
        min = emergency[i];
        answer[i] = rank;
        rank--;
    }
    else {
        answer[i] = rank;
        rank--;
    }

}

Solution 1) 

배열에서 Arrays.sort()를 통해 바로 정렬할 수도 있지만, 

ArrayList()를 통해 정렬하는 방법으로 풀어보았다.

List<Integer> arr = new ArrayList<>();

// * 간단히 배열 요소를 리스트로 넣는 방법
for(int i : emergency) {
    arr.add(i);
}

emergency 배열의 값들을 리스트에 옮겨담은 후

// 내림차순 정렬 
Collections.sort(arr, Collections.reverseOrder());

내림차순 정렬하였다. 

* 오름차순 정렬은 Collections.sort(arr);

for(int i = 0; i < answer.length; i++) {
    // 리스트에서 emergency[i] 숫자와 일치하는 인덱스에서 +1을 더한 값을 answer[i]에 대입
    // +1을 하는 이유는 인덱스로 접근하였었기때문에 1의 차이가 있음
    answer[i] = arr.indexOf(emergency[i])+1;
}

그리고 indexOf를 통해 arr 리스트에서 emergency[i] 숫자와 일치하는 값을 찾아내어

+1을 더한 후 answer배열에 넣는다.


<전체코드>

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class emergency {

	public static int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        
        List<Integer> arr = new ArrayList<>();
        
        // * 간단히 배열 요소를 리스트로 넣는 방법
        for(int i : emergency) {
        	arr.add(i);
        }
        
        // 내림차순 정렬 
        Collections.sort(arr, Collections.reverseOrder());
        
        for(int i = 0; i < answer.length; i++) {
        	// 리스트에서 emergency[i] 숫자와 일치하는 인덱스에서 +1을 더한 값을 answer[i]에 대입
        	// +1을 하는 이유는 인덱스로 접근하였었기때문에 1의 차이가 있음
        	answer[i] = arr.indexOf(emergency[i])+1;
        }
        return answer;
    }
	
	public static void main(String[] args) {
		int[] emergency = {3, 76, 24};
		
		System.out.println(Arrays.toString(solution(emergency)));
	}

}

알고리즘 문제 중 많은 편인 정렬 문제에서 Collections.reverseOrder(), indexOf() 등의 메서드를 사용하여 더 효과적으로 풀이할 수 있음을 알 수 있었다.


문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120835

 

프로그래머스

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

programmers.co.kr