📌강의 정리
한 가지의 방법은 반복을 두 번 하는데, 첫번째 반복에서는 음수만 answer에 push하고
그 다음반복에는 양수만 answer에 push하는 것이다.
하지만 정렬의 정의에는 해당하지 않으므로 버블정렬을 사용하면
반복하며 앞과 뒤만 비교해서 양수, 음수면 바꾸고 양수양수, 음수음수면 가만히둔다.
📌느낀점
처음부터 뭔가 이상하긴 했다.
내가 본 문제제목에는 버블정렬응용이란 말이 없었는데… 알았다면 조금 쉬웠겠지만
만약 내가 진짜 구글인터뷰를 한다면 거기서 버블정렬응용하란 말은 안했을테니 같은 상황인 것 같다.
결국 나는 공간복잡도를 2개 늘리면서 정렬의 의미와는 멀어졌다.
이건 문제를 푼게 아니다… 다음에는 정렬에 맞게 풀어볼 수 있도록 하자.
//나의 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr) {
let answer = [];
let arr1 = [];
let arr2 = [];
for (let x of arr) {
if (x > 0) arr2.push(x);
else arr1.push(x);
}
answer = arr1.concat(arr2);
return answer;
}
//새 배열 두개 만들고
//기존 배열 반복하며 0보다 작으면 배열1에
//0보다 크면 배열2에 push하고
//두 배열을 합친다.
let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer=arr;
for(let i=0; i<arr.length-1; i++){
for(let j=0; j<arr.length-i-1; j++){
if(arr[j]>0 && arr[j+1]<0){
[arr[j], arr[j+1]]=[arr[j+1], arr[j]];
}
}
}
return answer;
}
let arr=[1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
</script>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer=[];
for(let x of arr){
if(x<0) answer.push(x);
}
for(let x of arr){
if(x>0) answer.push(x);
}
return answer;
}
let arr=[1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
</script>
</body>
</html>
'JS 알고리즘 문제풀이 > 섹션 7. 정렬과 그리디, 결정알고리즘' 카테고리의 다른 글
6.장난꾸러기 현수 (0) | 2022.07.04 |
---|---|
5.Least Recently Used(카카오 캐시 문제 변형) (0) | 2022.07.03 |
4.삽입정렬 (0) | 2022.07.02 |
2.버블정렬 (0) | 2022.06.30 |
1.선택정렬 (0) | 2022.06.29 |