• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

splice로 써도 될까요?..?

23.12.25 20:29 작성 23.12.25 20:42 수정 조회수 142

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 인턴님의 프로필

인프런 AI 인턴

2023.12.27

안녕하세요, 인프런 AI 인턴입니다.

ync2201님, 주어진 문제에 대한 답변을 드리겠습니다.
splice 메소드를 사용하여 배열 내의 요소를 제거하고 새로운 요소를 추가하는 것은 가능합니다. 다만, splice는 원본 배열을 직접 수정하기 때문에 알고리즘 문제를 해결할 때는 부수적인 효과를 초래하지 않도록 주의해야 합니다.

섹션2의 5번 등수 구하기 문제에서는 각 학생의 점수에 따른 등수를 구하는 문제로 보입니다. solution 함수 내에서 splice를 사용하셔도 되지만 문제의 요구사항에 따라 등수 구하는 로직이 올바른지 여부, 그리고 알고리즘적으로 효율적인지를 고려해야 합니다.

제시된 코드의 경우, max는 반복할 때마다 전체 배열의 최댓값을 찾으며, idx는 그 최댓값의 인덱스를 찾는데 사용됩니다. 배열에서 최댓값을 제거하고 그 자리에 순서를 넣는 방식을 사용하셨네요. 하지만 answerarr을 참조하여 할당했기 때문에 answer 역시 arr의 변경을 그대로 반영합니다.

코드의 의도를 유추해보면, 각 점수의 등수를 구한 뒤 배열에 순서대로 저장하는 것 같습니다. 현재 코드는 정렬된 순서를 원래 배열에 반영하려고 하고 있지만, 몇 가지 문제점이 있습니다.

  1. Math.max(...arr)arr.indexOf(max)는 매 반복마다 전체 배열을 탐색하므로 비효율적입니다.
  2. splice로 요소를 제거하고 삽입하는 과정에서 배열의 다른 요소들이 영향을 받을 수 있습니다.

등수를 구하는 더 나은 방법은 각 점수의 등수를 계산하여 새 배열에 저장하는 것입니다. 이렇게 하면 원본 배열을 변경하지 않고 간단하게 answer 배열에 정답을 구성할 수 있습니다.

프로그래밍 문제 풀이에 있어 여러 접근 방식이 가능하므로, 여러 가지 방법을 시도해보시며 가장 효율적인 알고리즘을 찾는 것을 추천드립니다.