바위타는 두루미

2.4 분할 본문

Study/Interview준비

2.4 분할

DoRoMii 2019. 7. 26. 01:32
728x90

문제 

값 x가 주어졌을때 x보다 작은 노드들을 x보다 크거나 같은 노드들 보다 앞에 오도록 하는 코드를 작성하라. 만약 x가 리스트에 있다면 x는 그보다 작은 원소들보다 뒤에 나오기만 하면 된다. 즉 원소x는 오른쪽 그룹 어딘가에 존재하기만 하면 된다. 왼쪽과 오른쪽 그룹 사이에 있을 필요는 없다. 

 

예제 

입력 : 3 -> 5 -> 8 -> 5 -> 10 -> 2 -> 1

출력 : 3 -> 1 -> 2 -> 10 -> 5 -> 5 -> 8

 

해결법

1. x보다 작은 linked list , x보다 크거나 같은 linked list 를 구성하여 마지막에 연결하기

def Solution(node):
    small_head, small_tail = None, None
    large_head, large_tail = None, None

    while node is not None:
        if node.data < k :
            if small_head is None:
                small_head , small_tail = node , node
            else :
                small_tail.next = node
                small_tail = node
        else :
            if large_head is None :
                large_head, large_tail = node, node
            else :
                large_tail.next = node
                large_tail = node
        node = node.next

    if small_head is None :
        return large_head

    small_tail.next = large_head
    return small_head

2. 변수를 더 줄여서 존재하는 노드를 이용한 새로운 리스트 구성하기 

def Solution(node):
    head, tail = node, node
    while node is not None:
        if node.data < k :
            node.next = head
            head = node
        else :
            tail.next = node
            tail = node
        node = node.next

    tail.next = None
    return head

 

'Study > Interview준비' 카테고리의 다른 글

2.7 교집합  (0) 2019.07.27
2.5 리스트의 합  (0) 2019.07.26
2.2 뒤에서 k번째 원소 구하기  (0) 2019.07.26
2.1 중복 없애기  (0) 2019.07.26
1.8 0 행렬  (0) 2019.07.25
Comments