[프로그래머스][JAVA] 진료순서 정하기

Boknami·2023년 7월 23일
0

프로그래머스

목록 보기
9/29

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

고민한 부분

최근에는 바로 문제를 풀지 않고 머리속으로 흐름을 생각하고 문제를 풀려고 초반부에 주석을 달고 문제 풀이를 시작했다.

코드를 다 짜고 왜 안되나 싶었는데 알고 보니 객체의 형태가 달랐기 때문에 인덱스를 정상적으로 찾을 수 없었다..Integer형과 Int형 사이에 부딪힘

해결하기 위해 이진탐색을 통해 값을 찾았다. 속도도 빠르고 중복이 없었기에 가능했다.

원본코드

import java.util.*;
class Solution {
    public int[] solution(int[] emergency) {
        //중복된 게 없으니까 일단 내림차순 정렬시키고.
        //정렬된 배열 순회하면서 X번째 원소가 어디 인덱스에 위치했는지 찾기?
        //3 76 24
        //76 24 3
        //정렬X인 3은 정렬된 위치에 어디에 위치?
        int[] sorted = Arrays.copyOf(emergency, emergency.length);
        Arrays.sort(sorted);

        int[] answer = new int[emergency.length];
      
        //Integer 객체로 다른 객체이기 때문에 찾지 못하고 -1을 반환
        for(int i = 0 ; i < emergency.length; i++){
            answer[i] = Arrays.asList(sorted).indexOf(emergency[i]);
        }
        return answer;
    }
}

해결 코드

import java.util.*;
class Solution {
    public int[] solution(int[] emergency) {
        int[] sorted = Arrays.copyOf(emergency, emergency.length);
        Arrays.sort(sorted);
        int[] answer = new int[emergency.length];
        
        for(int i = 0 ; i < emergency.length; i++){
            int target = emergency[i];
            int index = Arrays.binarySearch(sorted, target);
            answer[i] = Math.abs(index+1-emergency.length) +1;
        }
        return answer;
    }
}

0개의 댓글

관련 채용 정보