Javascript/문제 풀이

프로그래머스 10일차

아라라_ 2023. 5. 26. 22:09

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

Frederick Philips Brooks
Mythical Man-Month 저자
728x90

진료순서 정하기

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

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

높은 순서대로 진료 순서를 정하는 것이 문제의 목표입니다.

해당 문제에서 제시된 해결 방법은 다음과 같습니다.

sorted라는 변수를 만들어 emergency 배열을 복사하고, 복사한 배열을 내림차순으로 정렬합니다.

slice() 메서드를 사용하여 emergency 배열을 복사한 이유는 원래 배열을 변경하지 않고 새로운 배열을 생성하기 위함입니다.
sort() 메서드에 콜백 함수 (a, b) => b - a를 전달하여 내림차순으로 정렬합니다.
emergency 배열을 순회하면서 각 원소의 응급도에 해당하는 순서를 구합니다.

map() 메서드를 사용하여 emergency 배열의 각 원소를 순회합니다.
sorted.indexOf(v)를 통해 현재 원소 v가 sorted 배열에서 어느 위치에 있는지 찾습니다.
indexOf() 메서드는 해당 원소의 인덱스를 반환하는데, sorted 배열은 내림차순으로 정렬되어 있으므로 응급도가 높은 순서대로 인덱스가 매겨집니다.
인덱스에 1을 더하여 실제 진료 순서를 나타내기 위해 +1을 해줍니다.
각 원소의 진료 순서를 담은 새로운 배열을 반환합니다.

 

순서쌍의 개수

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    // 정답 배열 생성
    const result = []
    // 1부터 n까지 반복하며 모든 약수를 정답 배열에 입력
    for(let i = 1 ; i <= n ; i ++) {
        if(n%i === 0) result.push(i)
    }
    // 모든 약수의 수는 순서쌍의 수와 같음
    return result.length
}

자연수 n에 대해 두 숫자의 곱이 n이 되는 자연수 순서쌍의 개수를 구하는 것입니다. 해당 문제에서 제시된 해결 방법은 다음과 같습니다. result라는 빈 배열을 생성합니다. 이 배열은 정답을 저장하는 용도로 사용될 것입니다. 1부터 n까지 반복하면서 n의 모든 약수를 찾아 result 배열에 추가합니다. for 반복문을 사용하여 i를 1부터 n까지 증가시키면서 반복합니다. n을 i로 나누었을 때 나머지가 0인 경우, 즉 n이 i의 약수인 경우에만 실행문을 수행합니다. n % i === 0을 사용하여 n을 i로 나눈 나머지가 0인지 확인합니다. n의 약수이면 result 배열에 i를 추가합니다. 약수는 n을 나누어 떨어지게 하는 숫자이므로, 해당 약수 i는 자연수 순서쌍의 한 원소가 됩니다. result 배열의 길이를 반환합니다. result.length를 사용하여 result 배열의 길이를 구합니다. result 배열에는 n의 약수들이 저장되어 있으므로, 이는 n의 자연수 순서쌍의 개수와 같습니다.