반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- adaptive regularization
- 슬라이싱
- Machine Learning
- deep learning
- 3D Face
- leetcode
- 팰린드롬
- 추천시스템
- MnasNet
- progressive learning
- TensorFlow
- AI
- uncertainty
- recommendation
- ubuntu
- model
- neural architecture search
- Adversarial Attack
- image classification
- training efficiency
- tf.image
- 3D 얼굴
- EfficientNetV2
- 파이썬
- tf.data
- Reconstruction
- PYTHON
- GAN
- CNN
Archives
- Today
- Total
굿
[연결 리스트] 팰린드롬 연결 리스트 본문
반응형
* leetcode 234. Palindrome Linked List
Q. 연결리스트가 팰린드롬 구조인지 판별하라.
# 입력
1->2
# 출력
false
# 입력
1->2->2->1
# 출력
true
풀이 1. 리스트 변환
# 연결 리스트를 파이썬의 리스트로 변환시켜 풀이
def isPalindrome(head: ListNode) -> bool:
q: List = []
if not head:
return True
node = head
# 리스트 변환
while node is not None:
q.append(node.val)
node = node.next
# 판별
while len(q) > 1:
if q.pop(0) != q.pop(): # 인덱스를 지정하여 처음과 끝 값을 비교
return False
return True
풀이 2. 데크를 이용한 최적화
# 코드를 최적화하기 위해 데크를 활용한다.
# 동적 배열로 구성된 리스트는 맨 앞 아이템을 가져오면 모든 값이 하나씩 시프팅되어 시간 복잡도가 O(n)이 발생한다.
# 하지만, 데크를 활용하면 시간 복잡도 O(1)로 처리를 끝낼 수 있다.
# 위 코드와의 차이는 데크를 선언하는 코드와 pop(0) 대신 popleft()로 처음 값을 뽑는 코드 2곳 뿐이다.
def isPalindrome(head: ListNode) -> bool:
q: Deque = collections.deque()
if not head:
return True
node = head
# 리스트 변환
while node is not None:
q.append(node.val)
node = node.next
# 판별
while len(q) > 1:
if q.popleft() != q.pop(): # 인덱스를 지정하여 처음과 끝 값을 비교
return False
return True
풀이 3. Runner를 이용한 우아한 풀이
# 입력 1->2->3->2->1
def isPalindrome(head: LinkNode) -> bool:
rev = None
slow = fast = head
# 런너를 이용해 역순 연결 리스트 구성
while fask and fask.next:
fast = fast.next.next
rev, rev.next, slow = slow, rev, slow.next
# 1차
# fast : 3
# rev : 1->None
# slow : 2->3->2->1
# 2차
# fast : 1
# rev : 2->1->None
# slow : 3->2->1
# 3차
# fast.next가 없으니 끝
if fast:
slow = slow.next
# fast : 1
# rev : 2->1->None
# slow : 2->1
# 팰린드롬 여부 확인
while rev and rev.val == slow.val:
slow, rev = slow.next, rev.next
return not rev
반응형
'프로그래밍 > [ Python ]' 카테고리의 다른 글
[연결 리스트] 역순 연결 리스트 (0) | 2021.01.25 |
---|---|
[연결 리스트] 두 정렬 리스트의 병합 (0) | 2021.01.24 |
[배열] 주식을 사고팔기 가장 좋은 시점 (0) | 2021.01.17 |
[배열] 자신을 제외한 배열의 곱 (0) | 2021.01.17 |
[배열] 배열 파티션 1 (0) | 2021.01.17 |