진료 순서 정하기
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
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] |
emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.
emergency가 [1, 2, 3, 4, 5, 6, 7]이므로 응급도의 크기 순서대로 번호를 매긴 [7, 6, 5, 4, 3, 2, 1]를 return합니다.
emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.
function solution(emergency) {
let sorted = emergency.slice().sort((a,b)=>b-a);
//return을 통해 새로운 값을 도출하므로 복사값이 필요 -> slice()를 통해
// 기본형과 참조형에서의 얕은 복사는 다름, 기본형은 기존 객체를 변화시키지 않지만, 참조형은 변화시킴
return emergency.map(v=>sorted.indexOf(v)+1);
}
⚡️ 원시 자료형 : Number, String, Boolean, Null, Undefined, Symbol
얕은 복사는 복사하는 객체의 주소를 그대로 복사하는 방법으로, 복사한 객체가 복사하기 전 객체를 참조하게 됨 -> 기존 객체도 변경
let a = {name : 'kim'};
let b = a;
b.name = 'lee';
console.log(a.name); //lee
📍 얕은 복사는 복사한 객체가 원복객체를 참조하기 때문에 참조형 데이터(객체, 배열 등)를 복사할 때 사용하면 안됨 -> 변화시키기 때문
SpreadOperator(...), 혹은 Object.assign( { }, 원본) 은 1depth 밖에 깊은복사되지 않음
참조형 내부의 참조형데이터는 얕은복사가 됨
깊은 복사는 복사하는 객체의 값을 복사하는 방법이며, 복사한 객체가 복사하기 전 객체를 참조하지 않음 -> 복사한 객체만 변경
값 자체를 복사하여 다른 메모리 주소를 할당
JS의 원시형 데이터는 깊은복사를 함
원시 데이터와 연결(참조)이 완전히 끊긴 새로운 데이터
📍 완전한 깊은복사
let a = {name : 'kim'};
let b = Object.assign({}, a);
b.name = 'lee';
console.log(a.name); //kim
참고 블로그 : https://space-rumi.tistory.com/12
map 메소드 참고 : https://velog.io/@daybreak/Javascript-map%ED%95%A8%EC%88%98