- 인자 emergency 는 배열 / 요소는 number (길이: 10이하, 요소: 100이하)
- 중복 요소는 없음
- 배열로 반환
일단 실패했다. 😭😫
구글링으로 다른 개발자들의 풀이를 참고하며 재풀이를 해보았다. 그러던 중, new Map() 함수를 사용한 풀이를 보게됐는데, 처음 알게된 함수라서 익혀보고자 new Map() 함수로 풀어본 풀이를 기록해보려 한다. ... 흑흑 난 아직 알고리즘 풀이를 못 풀면 슬프고 속상하다. 😔function solution(emergency) {
let emergencySort = [...emergency].sort((a, b)=> b - a);
let order = new Map();
for(let i = 0; i < emergencySort.length; i++) {
order.set(emergencySort[i], i+1);
}
return emergency.map(v => order.get(v)) // [ 2, 3, 1 ]
}
solution([30, 5, 33])
spread oprator(스프레드 연산자)
로 얕은 복사(shallow copy)
를 시켜줍니다. (추후 원 배열을 사용해야 하기 때문에 달라지면 안되기 때문입니다.)sort()
메서드를 사용합니다.new Map()
을 할당시켜줍니다.for문
으로, order 에 set()
메서드로,Map(3) {
33 => 1,
50 => 2,
5 => 3,
}
map()
메서드를 사용합니다.order.get()
메서드를 사용하여, order 객체에서 찾아 value 값을 가져옵니다. (get()
메서드에, key 값을 넣어주면 value 값을 반환해줍니다.)요로코롬 풀이 완료!
그러나 효율적인 풀이는 아니다.
많은 양의 시간이 소요되고, 코드도 길다.
new Map() 공부용 .. ㅎ !
function solution(emergency) {
let sorted = [...emergency].sort((a,b) => b-a);
return emergency.map(v => sorted.indexOf(v)+1);
}
스프레드 연산자를 통해 얕은 복사 후, 내림차순으로 정렬해주는 건 같다!
정렬 및 복사한 배열(sorted)에서 원배열의 요소들을 index 번호로 찾아, +1을 해주어 새 배열로 반환해주는 것 !
쉬운 메서드로 더 간단한, 더 효율적인 풀이였당 ..
부족한 나의 알고리즘 사고력.. ㅜ_ㅜ