“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”
- Frederick Philips Brooks
Mythical Man-Month 저자
진료 순서 정하기
문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
입출력 예
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) {
var sortedEmergency = emergency.slice().sort(function(a,b){
return b-a;
});
var answer = [];
for(var i=0; i<emergency.length; i++){
var index = sortedEmergency.indexOf(emergency[i])+1;
answer.push(index);
}
return answer;
}
sortedEmergency 변수에는 emergency 배열을 복사한 후 sort 함수를 사용해 응급도 크기를 기준으로 내림차순으로 정렬한 배열을 저장합니다.
answer배열은 최종적으로 반환할 결과 배열입니다.
for 루프를 통해 emergency 배열의 각 요소를 순회하고 fortedEmergency.indexOf(emergenct[i])를 통해 sortedEmergency배열에서 해당 요소의 인덱스를 찾습니다. 이때 인덱스는 0부터 시작하므로 1을 더해 응ㄱ브도의 순서를 나타냅ㄴ디ㅏ.
찾은 인덱스를 answer 배열에 push메서드를 사용해 추가하고 반복이 완료되면 최종적으로 구성된 answer 배열을 반환합니다.
다른 풀이
function solution(emergency) {
let sorted = emergency.slice().sort((a,b)=>b-a);
return emergency.map(v=>sorted.indexOf(v)+1);
}
emergency 배열을 복사해 sorted 변수에 저장합니다.
slice() 메서드를 사용해 배열을 복사하고 sort()메서드에서 콜백 함수 (a-b)=>b-a를 전달해 응급도 크기를 기준으로 내림차순으로 정렬합니다. a와 b는 비교되는 두 요소를 의미하며 b-a 를 반환해 내림차순 정렬이 이루어집니다.
emergency.map(v=>sorted.indexOf(v)+1)를 사용하여 emergency 배열의 각 요소에 대해 순서를 나타내는 배열을 생성합니다. map() 메서드는 emergency배열의 각 요소 v에 대해 콜백 함수를 실행하고, 반환된 결과를 새로운 배열에 저장합니다. 콜백 함수에서는 sorted배열에서 v의 인덱스를 찾아 1을 더해 순서를 나타냅니다.
가위바위보
문제설명
가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
제한사항
- 0 < rsp의 길이 ≤ 100
- rsp와 길이가 같은 문자열을 return 합니다.
- rsp는 숫자 0, 2, 5로 이루어져 있습니다.
입출력 예
rsp | result |
"2" | "0" |
"205" | "052" |
입출력 예 설명
- "2"는 가위이므로 바위를 나타내는 "0"을 return 합니다.
- "205"는 순서대로 가위, 바위, 보이고 이를 모두 이기려면 바위, 보, 가위를 순서대로 내야하므로 “052”를 return합니다.
출력
function solution(rsp) {
var answer = "";
for(var i=0; i<rsp.length; i++){
var r = rsp[i];
if(r === "2"){
answer += "0";
} else if (r ==="0"){
answer += "5";
} else if(r === "5"){
answer += "2";
}
}
return answer;
}
먼저 빈 문자열 answer를 초기화 합니다.
이 변수는 최종적으로 반환될 결과를 저장할 용도로 사용.
for루프를 통해 rsp 문자열을 한 글자씩 순회합니다. 변수 i는 현재 순회 중인 문자의 인덱스를 나타냅니ㅏㄷ.
rsp[i]값을 변수 r에 저장합니다. r은 현재 순회 중인 문자를 나타냅니다. if문을 사용해 현재 문자 r이 가위, 바위, 보 중 어떤 것인지 확인합니다. 만약 r이 2인 경우 answer에 0을 추가합니다. 이는 가위를 이기기 위해서는 바위를 내야하는 규칙에 따른 것입니다.
r이 0인 경우 answer에 5를 추가해 바위를 이기기 위해서는 보를 내야하는 규칙에 따릅니다.
r이 5인 경우 answer에 2를 추가합니다. 마찬가지입니다.
for문이 완료되면 최종적으로 구성된 answer문자열을 반환합니다.