[TID][Lv 0] 코딩 테스트 연습_6

MoonEn·2023년 7월 21일
0

Today I Learned

목록 보기
8/8

진료순서 정하기

정수 배열 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]

문제 풀이

처음에는 응급도의 우선도를 구하는 배열을 새로 만들고, 반복문을 통해서 정렬한 응급도와 기존의 응급도 순서를 비교하였습니다. 그리고 기존 응급도의 순서에 정렬한 응급도의 index+1 값을 넣어 새로운 배열로 만들어 반환하였습니다.

function solution(emergency) {
    let emergencySorted = emergency.slice().sort((a,b) => b-a);
    let answer = Array(emergency.length).fill(0);
    
    for(let i = 0; i<emergencySorted.length; i++){
        for(let j = 0; j<emergency.length; j++){
            if(emergencySorted[i]==emergency[j]){
                answer[j]=i+1;
            }
        }
    }
    
    return answer;
}

이렇게 응급도를 정렬하고, 중첩된 반복문으로 코드를 구성하게 되어서 복잡해집니다. 또한 효율성에서도 좋지 않습니다.

추가

중첩된 반복문을 사용하지 않고 map과 indexOf 메서드를 사용하여, 정렬된 배열에서 각 원소가 원래 배열에서 몇 번째 위치에 있는지 찾는 방법으로 문제를 해결할 수 있습니다.

function solution(emergency) {
    let sorted = emergency.slice().sort((a,b)=>b-a);
    return emergency.map(v=>sorted.indexOf(v)+1);
}

map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.
(출처-mdn)

마무리

코드를 작성하면서 우리는 간단한 문제임에도 불구하고 가끔은 더 효율적인 방법을 고려하지 못하고 어려운 길을 선택하는 경우가 있습니다. 쉬운 문제라고 간단하게 풀기 보다는 좀 더 효율적인 방법을 찾아보는 그런 개발자가 되도록 노력해야겠습니다.

profile
개발자를 꿈꾸는 직장인

0개의 댓글