외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
입출력 예emergencyresult
[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합니다.
제출 답안
자꾸 emergency의 순서가 가만히 있지않고 애먹어서 저렇게 문자열로 바꾸고 다시 정수로 바꿔주는 방식을 썼다.
function solution(emergency) {
let num, place;
const emergency1 = emergency.toString().split(',')
let new_emergency = emergency.sort((a,b) => b-a)
let arr = [];
for(let i=0; i<emergency.length; i++){
num = Number(emergency1[i])
place = new_emergency.indexOf(num)
arr.push(place+1)
}
return arr
}
아래처럼 순서를 유지하기 위해서는 [...str]을 사용했어야 했다.
<다른 풀이 코드>
function solution(emergency) {
let sort = [...emergency].sort((a, b) => b - a);
return emergency.map(k => {
const queue = sort.findIndex(v => v === k);
return queue + 1
});
}
[...str]을 사용해서 내 코드를 고쳤더니 잘된다.
function solution(emergency) {
let num, place;
const emergency1 = [...emergency] // 수정
let new_emergency = emergency.sort((a,b) => b-a)
let arr = [];
for(let i=0; i<emergency.length; i++){
num = emergency1[i] // 수정
place = new_emergency.indexOf(num)
arr.push(place+1)
}
return arr
}
헷갈리니 확인을 위해 return 값을 emergency1이라는, 순서가 바뀌지 않은 emergency값으로 출력해보았다.
function solution(emergency) {
let num, place;
const emergency1 = [...emergency]
let new_emergency = emergency.sort((a,b) => b-a)
let arr = [];
for(let i=0; i<emergency.length; i++){
num = emergency1[i]
place = new_emergency.indexOf(num)
arr.push(place+1)
}
return emergency1
}
[3, 76, 24] | |
기댓값 〉 | [3, 1, 2] |
실행 결과 〉 | 실행한 결괏값 [3,76,24]이 기댓값 [3,1,2]과 다릅니다. |
순서가 유지 된것을 볼 수 있다.
순석 유지가 안됬다면 아래와 같이 순서가 바뀌어서 떳을 것이다.
입력값 〉 | [3, 76, 24] |
기댓값 〉 | [3, 1, 2] |
실행 결과 〉 | 실행한 결괏값 [76,24,3]이 기댓값 [3,1,2]과 다릅니다. |
보충
Array.prototype.findIndex()
findIndex() 메서드는 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환합니다. 만족하는 요소가 없으면 -1을 반환합니다.
<예시>
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
// Expected output: 3
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
한 번만 등장한 문자(Lv.0)[indexOf 와 lastIndexOf로 중복 문자 거르기 ] (0) | 2023.03.09 |
---|---|
문자열 내림차순으로 배치하기(Lv.1)[reverse()는 순서를 거꾸로] (0) | 2023.01.12 |
내적(Lv.1)[for문을 reduce()로 바꿔 표현한 예시] (0) | 2023.01.12 |
가까운 수(Lv.0)[문제를 풀 방법을 모르겠으면 세분화해서 생각하자] (0) | 2023.01.12 |
k의 개수(Lv.0)[숫자 ->문자열 저장방법. 초기선언을' '로 ,+로 값들 집어넣기] (0) | 2023.01.12 |