문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 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
입출력 예 #2
입출력 예 #3
나의 풀이: 실패
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
int[] asc = emergency;
int[] answer = new int[emergency.length];
Arrays.sort(asc);
for(int i=0; i<=emergency.length-1; i++) {
for(int j=0; j<=emergency.length-1; j++) {
if(asc[i]==emergency[j]) {
answer[j]=emergency.length-i;
}
}
}
return answer;
}
}
asc=emergency
를 해버리면 emergency의 참조값이 asc에 대입이 된다.해결책 1
: 새로운 배열 변수를 선언하고 거기에 emergency의 값을 for문으로 담아준다.해결책 2:
clone 함수를 활용해결책 1
로 풀이
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
// asc라는 배열을 새로 선언해서 새로운 메모리 공간을 확보하고
int[] asc = new int[emergency.length];
int[] answer = new int[emergency.length];
// for돌려서 값 하나하나 넣어준다.
for(int i=0; i<=emergency.length-1; i++) {
asc[i]=emergency[i];
}
Arrays.sort(asc);
for(int i=0; i<=emergency.length-1; i++) {
for(int j=0; j<=emergency.length-1; j++) {
if(asc[i]==emergency[j]) {
answer[j]=emergency.length-i;
}
}
}
return answer;
}
}
해결책 2
로 풀이
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
int[] asc = emergency.clone();
int[] answer = new int[emergency.length];
Arrays.sort(asc);
for(int i=0; i<=emergency.length-1; i++) {
for(int j=0; j<=emergency.length-1; j++) {
if(asc[i]==emergency[j]) {
answer[j]=emergency.length-i;
}
}
}
return answer;
}
}
class Main {
public static void main(String[] args) {
int a[] = {1, 8, 3};
int b[] = a.clone();
b[0] = 10;
// 결과 확인
System.out.print("a 배열 : ");
for (int v:a)
System.out.print(v + " ");
System.out.print("\nb 배열 : ");
for (int v:b)
System.out.print(v + " ");
}
}
a 배열: 1 8 3
b 배열: 10 8 3
참고자료: 배열 복사/복제1
참고자료: 배열 복사/복제2