Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- oracle
- 카카오프로젝트100
- javascript
- python
- GIT
- 다크웹
- 보안뉴스
- 랜섬웨어
- 자바스크립트 node
- 자바스크립트 prototype
- 파이썬
- 자바스크립트 객체
- 자바스크립트
- Oracle SQL
- oracle db
- 자바스크립트 element api
- 자바스크립트 기본 문법
- 카카오프로젝트 100
- 깃허브
- 오라클
- 보안뉴스한줄요약
- 보안뉴스 요약
- 자바스크립트 API
- 자바스크립트 jQuery
- numpy
- 카카오프로젝트
- ES6
- php
- 보안뉴스요약
- 보안뉴스 한줄요약
Archives
- Today
- Total
FU11M00N
[LeetCode] Sort List - Javascript 본문
Sort List
[주어진 연결리스트 정렬 하기]
제약 조건
The number of nodes in the list is in the range [0, 5 * 10^4].
-10^5 <= Node.val <= 10^5
Example
문제 접근 방식
연결 리스트로 되어 있는 노드들을 정렬을 해서 리턴을 해야 한다.
문제 밑에 Follow up으로 시간 복잡도를 O(n logn)으로 풀 수 있냐고 물어보는 거 보니,
해당 문제는 O(n logn) 즉 병합 정렬로 푸는 게 문제의 의도인 거 같다.
하지만 해당 문제를 병합 정렬로 풀기 위해선 주어진 연결 리스트의 길이를 알아야 하는데, 길이를 어떻게 알 수 있을까에 대한 의문을 풀어내지 못해 배열을 통해 정렬 하는 방법으로 풀이했다.
먼저 head가 가리키는 주소를 arr의 빈 배열에 넣는다.
그 후 head = head.next를 통해 head가 undefined가 될 때까지 배열에 주소를 넣은 후
해당 배열을 오름차순으로 sort 한다.
배열의 길이만큼 반복문을 순회하며, arr[i].next에 arr[i+1]의 정렬된 값을 넣고 해당 데이터가 없다면,
에러가 나지 않게 null을 삽입해 준다.
이렇게 하는 이유는, 아래와 같은 연결 리스트가 있다고 할 때 현재 head는 4를 가르키는게 아닌, [4,2,1,3] 자체를 가르키고 있고, head.next는 [2,1,3]을 가르키고 있기때문이다.
arr 배열의 정렬되기 전과 정렬되기 후이다.
[ [4,2,1,3], [2,1,3], [1,3], [3] ] => [ [1,2,3,4], [2,3,4], [3,4], [4] ]
현재 arr[0] 배열이 정렬이 모두 되어 있기에 해당 배열(주소)를 리턴한다.
전체코드
/**
* @param {ListNode} head
* @return {ListNode}
*/
var sortList = function(head) {
let arr = [];
while (head) {
arr.push(head);
head = head.next;
}
arr = arr.sort((a, b) => a.val - b.val);
for (let i = 0; i < arr.length; i++) {
arr[i].next = arr[i + 1] || null;
}
return arr[0] ?? null;
};
'알고리즘' 카테고리의 다른 글
[LeetCode] Merge Sorted Array - Javascript (0) | 2023.09.04 |
---|---|
Linear Probing 방식 Hash Table을 구현 - javascript (0) | 2023.09.04 |
[LeetCode] Contains Duplicate II - Javascript (0) | 2023.09.01 |
[LeetCode] Valid Anagram - Javascript (0) | 2023.09.01 |
[LeetCode] Ransom Note - Javascript (0) | 2023.09.01 |
Comments