728x90
처음에는 약간 복잡하게 생각했다. 우선 idx를 포함한 배열을 정렬한다. 그러면 그 배열에는 정렬되기전 idx값을 포함하기 때문에 새로운 배열을 만들어 그에따라 값을 넣어주었다.
즉
[3,76,24] 라면
[[3,0],[76,1],[24,2]]
[[76,1],[24,2],[3,0]]
이란 배열을 얻게 되는데 해당 배열을 돌면서
1의 값을 배열 두번째에 넣어주고
2의 값을 배열 세번째에 넣어주고
3의 값을 배열 첫번째에 넣어주면 된다.
function solution(emergency) {
const e = emergency.map((el,idx) => [el,idx])
console.log(e)
var e2 = e.sort((a,b) => b[0]-a[0]).map((el,idx) => [idx,el[1]]);
const answer = []
for (let i=0 ; i<emergency.length ; i++){
answer[e2[i][1]] = e2[i][0] + 1
}
return answer;
}
문제를 풀고나니 분명 뭔가 매끄러운 방법이 있을 것 같아서 조금더 찾아보았다.
indexOf의 기능을 활용하면 값으로 그 배열의 index를 바로 찾을 수 있는데 나와 기본적인 방식은 같았지만 훨씬 더 가독성이 좋은 코드를 만들 수 있었다.
function solution(emergency) {
const e = [...emergency].sort((a,b) => b-a)
return emergency.map(el => e.indexOf(el)+1)
}
728x90
'FrontEnd > 프로그래머스' 카테고리의 다른 글
[JS] 모음 제거 (0) | 2023.01.27 |
---|---|
[JS] 개미 군단 (0) | 2023.01.27 |
[JS] 숨어있는 숫자의 덧셈(1) (0) | 2023.01.24 |
[JS] 제곱수 판별하기 (0) | 2023.01.24 |
[JS] 문자열안에 문자열 (0) | 2023.01.23 |