• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

이렇게 풀어도 괜찮은걸까요?

24.01.10 08:11 작성 조회수 64

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { let answer = arr; for (let i = 1; i < arr.length; i++) { for (let j = 0; j < i; j++) { if (arr[i] < arr[j]) { arr.unshift(arr[i]); arr.splice(i + 1, 1); } else { if (arr[i] < arr[j + 1]) { arr.splice(j + 1, 0, arr[i]) arr.splice(i + 1, 1) } } } } return answer; } let arr = [11, 7, 5, 6, 10, 9]; console.log(solution(arr));

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.12

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

wodms4525님, 제시하신 코드는 정렬 로직을 구현한 것으로 보이는데요, 조건에 따라 배열의 요소를 옮기는 방식으로 정렬을 시도하고 있네요. 하지만 코드에 몇 가지 문제가 있어 효율적인 정렬이 되지 않을 수 있습니다.

먼저, 내부 for 루프에서 arr[i] 요소를 앞으로 이동할 때, unshift 메소드를 사용하는 부분이 있습니다. 이 경우 전체 배열을 한 칸씩 밀어내야 하므로 성능상 좋지 않습니다. 또한, 뒤를 따르는 요소를 지우는 splice(i + 1, 1)은 현재 요소를 잘라내는데, 이미 앞으로 이동한 후이므로 인덱스가 바뀌게 되어 오류를 일으킬 수 있어 보입니다.

더불어, 정렬 알고리즘의 복잡도와 효율성도 중요한 포인트입니다. 위 코드는 중첩된 for 루프로 인해 O(n^2)의 시간 복잡도를 가진다고 볼 수 있는데요, 배열의 크기가 커질수록 비효율적일 수 있습니다.

이외에도 정렬이 정상적으로 이루어지지 않을 수 있는 다른 문제점들이 있을 수 있으므로, 먼저 코드가 잘못된 부분이 없는지 확인하고, 만약 정렬이 올바르게 동작하지 않는다면 코드 로직을 재검토 해보시는 것이 좋습니다.

구현하신 정렬 알고리즘이 특별한 조건 하에 적합하다면 사용해도 되지만, 일반적인 상황에서는 이미 잘 알려진 효율적인 정렬 알고리즘(퀵소트, 병합 정렬 등)을 사용하는 것을 권장드립니다.

혹시 더 자세한 설명이 필요하시거나 프로그래밍에 대한 도움이 필요하시면, 수강 전 문의 게시판을 활용하거나 질문의 답변을 받고 싶은 강의의 내용과 관련하여 지식공유자님께 직접 문의를 남겨보시는 것도 좋은 방법입니다.

도움이 필요하면 언제든지 문의하세요. 감사합니다!