[LeetCode#147] Insertion Sort List

2024. 9. 28. 00:57·Algorithm/문제풀이

 

❒ Description


날짜 2024.09.27 (금)
레벨 Medium
제목 Insertion Sort List
링크 https://leetcode.com/problems/insertion-sort-list/description/
알고리즘 정렬
시간 복잡도 O(NlonN)

 

이번 문제는 삽입 정렬을 구현하면 되는 문제이다. 하지만 기본적으로 Linked List가 주어지기 때문에 까다롭다.

 

 

 

 

 

❒ 문제 및 로직 분석


먼저 삽입 정렬은 정렬을 해야 할 대상과 정렬을 끝낸 대상, 두 그룹으로 나눠야 한다.

  • sorted : 정렬을 끝낸 대상
  • head : 정렬을 해야 할 대상

그리고 몇가지 특이 케이스를 고려해야 한다.

 

1. 정렬된 결과 사이에 삽입해야 할 경우

위 경우와 같이 `sorted.next.val = 3` 이 정렬되어야 할 `head.val = 4` 보다 작은 경우에는 다음과 같이

sorted를 한 칸 앞으로 옮겨준다. 이렇게 하는 이유는 4가 3과5 사이에 위치해야 하기 때문에 그렇다.

 

2. 정렬된 결과 맨 앞에 삽입해야 할 경우

현재 sorted는 root(최종 정렬)의 일부분 이므로, 이런 경우에는 sorted를 Root로 치환해줘야 한다. 

 

 

 

 

 

❒ Solution


public ListNode insertionSortList(ListNode head) {
    ListNode root = new ListNode();
    ListNode sorted = root;

    while (head != null) {
        while (sorted.next != null && sorted.next.val < head.val) sorted = sorted.next;
        ListNode sortedNext = sorted.next;
        ListNode headNext = head.next;
        sorted.next = head;
        head.next = sortedNext;
        head = headNext;
        if (head != null && sorted.val > head.val) sorted = root;
    }

    return root.next;
}

 

더보기

 

 

 

 

 


'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#242] Valid Anagram  (0) 2024.09.29
[LeetCode#179] Largest Number  (0) 2024.09.29
[LeetCode#56] Merge Intervals  (0) 2024.09.27
[LeetCode#148] Sort List  (0) 2024.09.27
[LeetCode#105]Construct BT from Preorder and Inorder Traversal  (0) 2024.09.26
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#242] Valid Anagram
  • [LeetCode#179] Largest Number
  • [LeetCode#56] Merge Intervals
  • [LeetCode#148] Sort List
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (173)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (7)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • 친절한 SQL 튜닝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Back-Tracking
    greedy
    Two-Pointer
    부분단조성
    binarysearch
    sliding-window
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[LeetCode#147] Insertion Sort List
상단으로

티스토리툴바