반응형
📌강의 정리
주어진 배열을 정렬한 배열을 새로만들고, 만든 배열과 처음 배열을 비교해 다른 숫자의 인덱스들을 answer에 push한다.
📌느낀점
내가 그동안 정렬에 너무 심취해 있었나보다..
나의 풀이가 시간복잡도는 조금 더 좋지만 더 복잡하다.
간단하게 풀 수 있고 별다른 조건이없다면 간결하고 직관적인 풀이를 생각해보자.
//나의 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr) {
let answer = [];
let cnt = (res = 0);
for (let i = arr.length; i > 0; i--) {
if (arr[i] < arr[i - 1]) {
[arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
cnt++;
res = i;
}
}
answer.push(res), answer.push(res + cnt);
return answer;
}
//삽입정렬을 하며 처음 이동했을때 cnt하며 res를 i값으로 계속 업데이트한다.
//이 정렬이 멈췄을때의 res와 res에 cnt+한 값을 push한다.
let arr = [120, 125, 152, 130, 135, 135, 143, 127, 160];
console.log(solution(arr));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr) {
let answer = [];
let sortArr = arr.slice();
sortArr.sort((a, b) => a - b);
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== sortArr[i]) answer.push(i + 1);
}
return answer;
}
let arr = [120, 125, 152, 130, 135, 135, 143, 127, 160];
console.log(solution(arr));
</script>
</body>
</html>
반응형
'JS 알고리즘 문제풀이 > 섹션 7. 정렬과 그리디, 결정알고리즘' 카테고리의 다른 글
8.회의실 배정 (0) | 2022.07.06 |
---|---|
7.좌표 정렬 (0) | 2022.07.05 |
5.Least Recently Used(카카오 캐시 문제 변형) (0) | 2022.07.03 |
4.삽입정렬 (0) | 2022.07.02 |
3.Special Sort(버블정렬응용) (0) | 2022.07.01 |