본문 바로가기
Algorithm/LEET CODE ( 파이썬 알고리즘 인터뷰)

[LEET CODE] 21. Merge Two Sorted Lists ( 연산자 우선순위, 변수 스왑)

by newnu 2021. 3. 22.
반응형

# Problem

Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.

Constraints:

  • The number of nodes in both lists is in the range [0, 50].
  • -100 <= Node.val <= 100
  • Both l1 and l2 are sorted in non-decreasing order.

 

# My Answer

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        # 둘 중 하나가 비어있으면 나머지 하나 리턴
        if l1 is None:
            return l2
        if l2 is None:
            return l1
            
        # l1, l2 모두 값이 존재하면 a,b 초기값 설정
        if l1 and l2 and l1.val<=l2.val:
            a = l1
            b = l2
        else:
            a = l2
            b = l1
            
        answer = a # 정답 반환할 때 사용할 변수
        
        # a에 계속 연결해 나가기
        while a and a.next:
            if a.next.val>b.val: # a의 다음 수보다 b의 값이 작으면 b를 a에 연결후 a.next 는 b 에 저장 
                a.next,b = b,a.next
                a = a.next
            else: # a.next가 b보다 작으면 a.next는 그대로 유지하고 a를 하나 다음으로 옮김
                a = a.next
        if a and b: # while문을 빠져나왔을 때 아직 b에 남은 값이 존재하면 a에 연결
            a.next = b
        return answer

 

# Solution 1 - 재귀 구조로 연결

# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if (not l1) or (l2 and l1.val > l2.val):
            l1, l2 = l2, l1 # 작은 값을 계속 l1에 연결시킨다.
        if l1:
            l1.next = self.mergeTwoLists(l1.next, l2)
        return l1

# 연산자 우선순위

우선순위 연산자 설명
1 ( ) 괄호
2 f(args...) 함수 호출
3 x[index:index] 슬라이싱
4 x[index] 배열
5 x.attribute 속성 참조
6 ** 지수
7 ~x 비트 연산 NOT
8 +x,-x 양수, 음수
9 *, /, % 곱, 나눗셈, 나머지
10 +, - 덧셈, 뺄셈
11 >> , << 비트 연산 시프트
12 & 비트 연산 AND
13 ^ 비트 연산 XOR
14 | 비트 연산 OR
15 in, not in, is, is not, <, <=, >, >=, <>, !=, == 비교 연산
16 not x 부울 연산 NOT
17 and 부울 연산 AND
18 or 부울 연산 OR
19 lambda 람다 표현

(출처 : 파이썬 알고리즘 인터뷰 책)

 

 

# 변수 스왑

1) 임시 변수 (Temporarily Variable) 사용하기

Temp = a

a=b

b=temp

 

2) 다중 할당 - 파이썬에서 지원하는 강력한 기능 ***

a,b = b,a

반응형