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
'Java' 카테고리의 다른 글
[프로그래머스] 추억 점수 (0) | 2023.10.19 |
---|---|
[프로그래머스] 더한 원소들의 합 (0) | 2023.10.17 |
[프로그래머스] A로 B 만들기 (0) | 2023.10.16 |
[프로그래머스] 중복된 문자 제거 (0) | 2023.10.16 |
[프로그래머스] 369 게임 (0) | 2023.10.16 |
댓글