[programmers] 진료 순서 정하기 - Java

외과의사 머쓱이는 주어진 응급도 배열을 기준으로 환자의 진료 순서를 정하는 문제를 풀어야 합니다. 첫 번째 접근 방식은 Integer 배열로 변환 후 내림차순 정렬하여 원본 배열과 값을 비교하는 것이었습니다. 두 번째 방식은 이중 반복문을 사용하여 현재 인덱스의 값이 다른 요소들의 값보다 작을 경우 count를 증가시키는 방식이었습니다.
Jan 26, 2024
[programmers] 진료 순서 정하기 - Java

문제 설명

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

제한사항

  • 중복된 원소는 없습니다.
  • 1 ≤ emergency의 길이 ≤ 10
  • 1 ≤ emergency의 원소 ≤ 100

입출력 예

emergency
result
[3, 76, 24]
[3, 1, 2]
[1, 2, 3, 4, 5, 6, 7]
[7, 6, 5, 4, 3, 2, 1]
[30, 10, 23, 6, 100]
[2, 4, 3, 5, 1]

입출력 예 설명

입출력 예 #1
  • emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.
입출력 예 #2
  • emergency가 [1, 2, 3, 4, 5, 6, 7]이므로 응급도의 크기 순서대로 번호를 매긴 [7, 6, 5, 4, 3, 2, 1]를 return합니다.
입출력 예 #3
  • emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.

처음 접근한 방식

import java.util.*; class Solution { public int[] solution(int[] emergency) { int[] answer = new int[emergency.length]; Integer[] arr = Arrays.stream(emergency).boxed().toArray(Integer[]::new); Arrays.sort(arr, Collections.reverseOrder()); for(int i=0; i<emergency.length; i++){ for(int j=0; j<arr.length; j++){ if(arr[j]==emergency[i]){ answer[i] = j+1; } } } return answer; } }

두 번째 방식

import java.util.*; class Solution { public int[] solution(int[] emergency) { int[] answer = new int[emergency.length]; for(int i=0; i<emergency.length; i++){ int idx = 1; for(int j=0; j<emergency.length; j++){ if(emergency[i]<emergency[j]){ idx++; } } answer[i] = idx; } return answer; } }
 

핵심 키워드

  • 처음 접근한 방식은 int 배열을 stream을 통해 Integer 배열로 변환하고, Collections.reverseOrder()를 이용해 내림차순으로 정렬한 다음 원본 배열과 값을 비교해서 값이 같을 경우 해당 인덱스를 저장하는 코드를 작성했다.
  • 두 번째로 접근한 방식은 이중반복문을 통해 현재 인덱스의 값이 다른 요소들의 값보다 작을 경우, count를 증가시켜서 해당 값을 배열에 저장하는 코드를 작성했다.
 

결론!

해당 문제를 풀면서 코드를 작성하다가 가독성이 좋지 못하다고 느꼈고, 이를 수정할 수 있었다.
 
Share article

More articles

See more posts
RSSPowered by inblog