🗃️javascript/프로그래머스

진료순서 정하기(Lv.0)[배열 순서유지:const str2=[...str], findIndex()설명]

하얀성 2023. 1. 12. 14:49
  •  
문제 설명

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 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