작성
·
249
·
수정됨
1
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
<script>
function solution(arr){
let answer = arr;
let [max, idx] = [-1, -1];
for (let i = 0; i < arr.length; i++){
max = Math.max(...arr)
idx = arr.indexOf(max)
arr.splice(idx, 1) // 배열 내 값 제거
arr.splice(idx, 0, i+1) // 제거한 자리에 max 순서 넣기
}
return answer;
}
let arr=[87, 89, 92, 100, 76]; // 4 3 2 1 5
console.log(solution(arr));
</script>
섹션2의 5번 등수구하기문제입니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
ync2201님, 주어진 문제에 대한 답변을 드리겠습니다.
splice
메소드를 사용하여 배열 내의 요소를 제거하고 새로운 요소를 추가하는 것은 가능합니다. 다만, splice
는 원본 배열을 직접 수정하기 때문에 알고리즘 문제를 해결할 때는 부수적인 효과를 초래하지 않도록 주의해야 합니다.
섹션2의 5번 등수 구하기 문제에서는 각 학생의 점수에 따른 등수를 구하는 문제로 보입니다. solution
함수 내에서 splice
를 사용하셔도 되지만 문제의 요구사항에 따라 등수 구하는 로직이 올바른지 여부, 그리고 알고리즘적으로 효율적인지를 고려해야 합니다.
제시된 코드의 경우, max
는 반복할 때마다 전체 배열의 최댓값을 찾으며, idx
는 그 최댓값의 인덱스를 찾는데 사용됩니다. 배열에서 최댓값을 제거하고 그 자리에 순서를 넣는 방식을 사용하셨네요. 하지만 answer
는 arr
을 참조하여 할당했기 때문에 answer
역시 arr
의 변경을 그대로 반영합니다.
코드의 의도를 유추해보면, 각 점수의 등수를 구한 뒤 배열에 순서대로 저장하는 것 같습니다. 현재 코드는 정렬된 순서를 원래 배열에 반영하려고 하고 있지만, 몇 가지 문제점이 있습니다.
Math.max(...arr)
와 arr.indexOf(max)
는 매 반복마다 전체 배열을 탐색하므로 비효율적입니다.splice
로 요소를 제거하고 삽입하는 과정에서 배열의 다른 요소들이 영향을 받을 수 있습니다.등수를 구하는 더 나은 방법은 각 점수의 등수를 계산하여 새 배열에 저장하는 것입니다. 이렇게 하면 원본 배열을 변경하지 않고 간단하게 answer
배열에 정답을 구성할 수 있습니다.
프로그래밍 문제 풀이에 있어 여러 접근 방식이 가능하므로, 여러 가지 방법을 시도해보시며 가장 효율적인 알고리즘을 찾는 것을 추천드립니다.