본문 바로가기
Java

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

by hunbal 2023. 10. 16.
SMALL

문제 설명 및 예시

주어진 배열의 원소들을 응급도의 내림차순으로 재배치한 배열로 반환하는 함수를 완성하는 문제이다.

 


풀이

원본 배열을 복사 후 응급도가 높은 순서대로 순위를 부여하는 방법으로 문제를 해결하려했다.

이번에는 Arrays.binarySearch(array, key) 라는 메서드를 활용하여 문제를 풀 수 있었다.

1. 정답으로 제시할 배열의 길이를 원본 배열의 길이와 똑같이 설정해준다. *index 오류 방지

2. 원본 배열을 복사 후 응급도를 내림차순으로 정렬해준다.

3. 반복문과 Arrays.binarySearch(array, key)를 활용하여 원본 배열의 위치를 찾는다.

*Arrays.binarySearch(array, key)

주어진 배열 array에서 특정 요소 key의 위치를 찾는 데 사용된다.
배열이 정렬되어 있어야 올바르게 동작하며, 정렬된 배열에서 이진 검색을 수행하여 key의 인덱스를 반환함.
ex)
int[] array = {1, 3, 5, 7, 9};   
int index = Arrays.binarySearch(array, 5);
여기서 index는 2가 된다. 배열에서 세 번째 요소이기 때문. 
위 코드에서는 정렬한 배열에서 원본 배열의 값을 찾아 index 변수에 치환한다.

 

4. 정답으로 반환할 배열은 원본 배열의 길이 - 정렬한 배열에서 찾은 원본 배열 원소의 순서대로 배치해준다.

    즉, 응급도가 높은 순서대로 순위를 부여하는 것이다.

 

 

 

Arrays.binarySearch(array , key) 메소드를 활용하는 방법을 찾은 후, 반환할 배열 원소에 순위를 부여하기까지 시간이 꽤 걸렸다. 배열을 여러 개 활용하고, 인덱스 순서도 여러 개를 고려해야했기 때문에 꽤나 복잡하고 머리아픈 풀이가 되었는데, 배열의 기본기를 조금 더 다질 수 있는 문제였다고 생각한다.

다른 정답자들의 풀이를 보니 Map이나 스트림 등 여러 가지 방법들의 활용 사례가 있었는데 다른 방법으로도 문제를 풀어봐야겠다.

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120835

 

프로그래머스

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

programmers.co.kr

 

 

 

댓글