❓문제설명
진료순서 정하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
비슷한 문제를 여럿풀었지만 자꾸 방법을 까먹길래, 입문레벨이지만 기억하기 위해서 글을 작성한다.
🔍문제해석
어떤걸 풀어야 할까?
- 응급도가 적힌 배열이 주어지면 각 응급도에 따라 진료받을 수 있는 순위를 배열로 나타내라. 큰 수 일수록 우선순위가 높다.
- 단, 진료받을 수 있는 순위는 배열에서 응급도가 위치한 인덱스와 동일한 인덱스에 배치되어야한다.
- 예시
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] |
🧐문제풀이
- 문제 풀이 구상
주어진 인덱스와 응급도를 필드로 가지고 있는 클래스로 만들어 내림차수으로 정렬한 다음
객체가 갖고 있는 원래의 위치(index)에 정렬된 순서를 대입한다.
- 알고리즘 선택
ComparaTo를 이용한 내림차순 정렬
!제출코드
- 필드로 위치(idx)와 응급도 값(value)을 갖는 클래스를 작성한다.
- Comparable 인터페이스를 구현받아 value 값으로 내림차순 정렬할 수 있도록 ComparTo를 작성한다.
- Emergency클래스를 담는 배열을 만들어, 주어진 응급도 배열로 인스턴스 생성을 한 다음 넣어준다. 그때 i는 배열 내 위치이고, value는 응급도 값이다.
- Arrays.sort로 배열을 정렬한다. 클래스에 작성되어있는 CompareTo에 따라 value의 값으로 내림차순 정렬하게 된다.
- for문을 이용해 배열을 탐색한다. (i+1)는 진료 순서이고, indexList[i].idx는 기존의 순서이다.
- answer[기존순서] = 진료순서 대입한다.
import java.util.*;
class Solution {
public static int[] solution(int[] emergency) {
Emergency[] indexList = new Emergency[emergency.length];
// (3)
for (int i = 0; i < emergency.length; i++) {
indexList[i] = new Emergency(i,emergency[i]);
}
// (4)
Arrays.sort(indexList);
int[] answer = new int[emergency.length];
// (5)
for (int i = 0; i < indexList.length; i++) {
// (6)
int idx = indexList[i].idx;
answer[idx] = i + 1;
}
return answer;
}
// (1)
static class Emergency implements Comparable<Emergency> {
int idx;
int value;
public Emergency(int idx, int value) {
this.idx = idx;
this.value = value;
// (2)
@Override
public int compareTo(Emergency o) {
return o.value - this.value;
}
}
}
728x90
반응형
'개발 공부 > 코딩테스트 연습' 카테고리의 다른 글
[프로그래머스 입문][자바] 볼 던지기 (0) | 2024.11.12 |
---|---|
[프로그래머스 입문][자바] 구슬을 나누는 경우의 수 (0) | 2024.10.22 |
[프로그래머스 Lv3][자바] 단속카메라 (0) | 2024.09.28 |
[프로그래머스 Lv3][자바] 섬 연결하기 (1) | 2024.09.25 |
[프로그래머스 Lv3][자바] 가장 먼 노드 (1) | 2024.09.24 |