• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

이렇게 풀어도 될까요...?

24.04.03 17:04 작성 조회수 56

0

function solution(n = 0, arr = []) {
  let answer = [];
  const sortedArr = [...arr].sort((a, b) => b - a);

  answer = arr.map((val) => sortedArr.indexOf(val) + 1);
  return answer;
}

console.log(solution(5, [76, 92, 92, 100, 76])); // 4 2 2 1 4

막 2중 for문을 돌릴지, 돌리게 된다면 동일 점수 사람끼리 같은 등수를 해주는 조건문 이것저것 생각하다가 이렇게 한번 작성해서 돌려봤는데 여러 케이스에 부합하는 것 같아서 여쭤봅니다!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.05

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

tmdwhd319님, 제시하신 자바스크립트 코드는 주어진 배열에서 각 요소의 순위를 구하는 방식으로, 문제의 요구사항을 충족하는 효과적인 솔루션이 될 수 있습니다. 다만, sort() 함수가 사용된 후, map()indexOf()를 통해 순위를 계산하므로, 같은 점수를 가진 요소에 동일한 순위를 부여하는 부분도 잘 처리하고 있습니다.

이 코드는 입력 배열의 각 요소값에 대해 정렬된 배열에서의 인덱스(즉, 순위)를 찾아 반환하며, 같은 값의 인덱스는 같게 나타나 동일 점수에 대하여 같은 순위를 부여하는 로직을 구현하고 있습니다. 그러나, 동일한 값이 여러 개 있을 경우 indexOf() 메서드가 첫 번째로 발견된 요소의 인덱스를 반환하기 때문에, 효율적인 측면에서는 좀 더 최적화할 여지가 있습니다. 예를 들어, 크기가 매우 큰 배열의 경우, indexOf() 메서드의 사용은 성능 저하의 원인이 될 수 있습니다.

또한, sort() 함수는 기본적으로 안정 정렬(stable sort)이 아닐 수 있으므로(브라우저 혹은 자바스크립트 엔진에 따라 다름), 같은 값을 가진 요소의 상대적인 순서가 입력 배열에서의 순서를 보장하지 않을 수도 있습니다. 이는 주로 실제 운영 환경에서 문제가 될 수 있으므로, 알고리즘 이해 목적의 경우에는 현재 방식도 충분히 유용합니다.

결론적으로, 여러분이 제시한 코드는 문제를 해결하는 데 있어서 유효하지만, 실제 프로덕션 환경에서의 사용을 고려한다면 성능과 정렬의 안정성을 고려한 추가적인 최적화가 필요할 수 있습니다.