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] |
첫번째 접근
: sort()는 mutable 하므로 emergency 배열을 복사해 내림차순으로 정렬한 order 배열을 만든다.
그리고 order와 emergency, 두 배열을 돌며 요소가 동일한 경우에 새로운 배열 answer에 order의 index에 1을 더한 값을 넣어 진료 순서를 매긴다.
function solution(emergency) {
let answer = new Array(emergency.length);
let order = emergency.slice().sort((a,b) => b - a);
for(let i = 0; i < emergency.length; i++) {
for(let j = 0; j < order.length; j++) {
if(emergency[i] === order[j]){
answer[i] = j + 1
}
}
}
return answer
}
두번째 접근
: 이중 for문을 돌리니, 뭔가 복잡한것 같다. 좀 더 간결해질 수 있는 방법은 없을까?
먼저, 굳이 answer의 길이를 정해줄 이유는 없다고 생각해 answer에 새로운 배열을 할당했다.
그리고 answer에 들어가야 할 값은 order 배열의 요소를 순서대로 받아 emergency 배열에서의 index를 찾은 후 answer 배열에 1씩 증가한 값을 넣어 순서를 매겨 해결할 수 있다고 생각했다.
function solution(emergency) {
let answer = []
let order = emergency.slice().sort((a, b) => b - a);
let i = 1
order.map(el => answer[emergency.indexOf(el)] = i++ )
return answer;
}
solution
function solution(emergency) {
let sorted = emergency.slice().sort((a,b)=>b-a);
return emergency.map(v=>sorted.indexOf(v)+1);
}
// 아... 내림차순으로 정렬한 배열(sorted)에서 기존 배열(emergency)의 요소의 인덱스를 가져와 해당 인덱스에 1을 더한 값을 emergency의 요소 대신 넣어준 새로운 배열 반환
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
JS Practice) 프로그래머스 : 숨어있는 숫자의 덧셈(2) (0) | 2023.03.21 |
---|---|
JS Practice) 프로그래머스 : 이진수 더하기 (0) | 2023.03.20 |
JS Practice) 프로그래머스 : 팩토리얼 (1) | 2023.03.16 |
JS Practice) 프로그래머스 : 2차원으로 만들기 (0) | 2023.03.15 |
JS Practice) 프로그래머스 : 모스부호(1) (2) | 2023.03.14 |