728x90
문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 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합니다.
1
2
3
4
5
6
7
8
9
10
11
|
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
for(int i=0;i<emergency.length;i++) {
for(int j=0;j<emergency.length;j++) {
if(emergency[i]<=emergency[j]) answer[i]++;
}
}
return answer;
}
}
|
cs |
제일 무식한 방법으로 전체를 반복하며 나의 값보다 적거나 같으면 더하기 1을 한다. 답은 나온다 그너나 냄새가 난다. |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.util.Arrays;
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
Arrays.fill(answer, 1);
for(int i=0;i<emergency.length-1;i++) {
for(int j=i+1;j<emergency.length;j++) {
if(emergency[i]<=emergency[j])
answer[i]++;
else
answer[j]++;
}
}
return answer;
}
}
|
cs |
선택 정렬 알고리즘을 이용하여 반복횟수를 n*n에서 (n*(n-1))/2 로 줄였다. 조금 빨라지기는 했느데.... 음..... 아직도 조금 냄세가 난다. |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
Integer tmp[] = Arrays.stream(emergency).boxed().toArray(Integer[]::new);
Arrays.sort(tmp,Collections.reverseOrder());
for(int i=0; i<emergency.length; i++){
answer[i] = Arrays.asList(tmp).indexOf(emergency[i])+1;
}
return answer;
}
}
|
cs |
int 배열을 Integer 배열로 만든다. Integer tmp[] = Arrays.stream(emergency).boxed().toArray(Integer[]::new);
역순(내림차순)으로 정렬한다. Arrays.sort(tmp,Collections.reverseOrder());
동일한 값을 찾아 index + 1한다. (index는 0부터 시작 순위는 1부터 시작) for(int i=0; i<emergency.length; i++){
answer[i] = Arrays.asList(tmp).indexOf(emergency[i])+1; } 음 이런 방법도 있군!!!! |
1
2
3
4
5
6
7
8
9
10
11
12
|
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public int[] solution(int[] emergency) {
List<Integer> list = Arrays.stream(emergency).boxed()
.sorted(Collections.reverseOrder())
.collect(Collectors.toList());
return Arrays.stream(emergency).map(i -> list.indexOf(i) + 1).toArray();
}
}
|
cs |
Stream을 이용하여 역순으로 정렬하여 리스트를 만들고 Stream을 이용하여 map()에서 위치값을 찾아 더하기 1을 하였다. 리스트 자리에 위의 값을 쓰면 1줄로도 가능하겠다. return Arrays.stream(emergency).map(i -> Arrays.stream(emergency).boxed() .sorted(Collections.reverseOrder())
.collect(Collectors.toList()) .indexOf(i) + 1).toArray(); |
728x90
'프로그래머스 코딩(자바) > Level 0' 카테고리의 다른 글
Programmers Level 0 - 숨어있는 숫자의 덧셈 (2) (0) | 2023.03.06 |
---|---|
Programmers Level 0 - 한 번만 등장한 문자 (0) | 2023.03.06 |
Programmers Level 0 - k의 개수 (0) | 2023.03.03 |
Programmers Level 0 - 가까운 수 (0) | 2023.03.03 |
Programmers Level 0 - 2차원으로 만들기 (0) | 2023.03.03 |