진료 순서 정하기

yejichoi·2023년 2월 19일
0

알고리즘 스터디

목록 보기
9/153

진료 순서 정하기

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

입출력 예

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합니다.


풀이

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

📍 얕은 복사는 복사한 객체가 원복객체를 참조하기 때문에 참조형 데이터(객체, 배열 등)를 복사할 때 사용하면 안됨 -> 변화시키기 때문

  • slice복사
  • spread복사
  • assign복사

    SpreadOperator(...), 혹은 Object.assign( { }, 원본) 은 1depth 밖에 깊은복사되지 않음
    참조형 내부의 참조형데이터는 얕은복사가 됨

깊은 복사는 복사하는 객체의 값을 복사하는 방법이며, 복사한 객체가 복사하기 전 객체를 참조하지 않음 -> 복사한 객체만 변경

값 자체를 복사하여 다른 메모리 주소를 할당
JS의 원시형 데이터는 깊은복사를 함
원시 데이터와 연결(참조)이 완전히 끊긴 새로운 데이터

📍 완전한 깊은복사

  • 재귀적 방법
  • JSON.parse & JSON.stringify
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

0개의 댓글