반응형

Python/알고리즘 52

[파이썬 알고리즘 인터뷰] 20. 유효한 괄호

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 20. 유효한 괄호 리트코드 20. Valid Parentheses 문제입니다. leetcode.com/problems/valid-parentheses/ 풀이 매핑 테이블을 만들어 놓고 테이블에 존재하지 않으면 푸시하고, 팝했을 때 결과가 일치하지 않으면 False를 리턴하도록 구현한 풀이입니다. def isValid(self, s): table = { ')':'(', ']':'[', '}':'{', } stack = [] for char in s: if char not in table: stack.append(char) elif not stack or tabl..

Python/알고리즘 2021.02.21

[자료구조] 스택을 알아보고 연결 리스트로 스택 ADT 구현하기

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 스택(Strack) 스택은 LIFO(Last In First Out, 후입선출)로 처리됩니다. 잔뜩 쌓아둔 접시를 떠올려보겠습니다. 마지막에 쌓은 접시가 맨 위에 놓일 것입니다. 그리고 가장 마지막에 쌓은 접시를 제일 먼저 꺼내게 됩니다. 스택도 마찬가지로 가장 마지막에 쌓은 데이터를 제일 먼저 꺼냅니다. 파이썬은 스택 자료형을 별도로 제공하지는 않지만, 리스트가 사실상 스택의 모든 연산을 지원합니다. 스택은 다음과 같은 2가지 주요 연산을 지원하는 요소의 컬렉션으로 사용되는 추상 자료형입니다. push(): 요소를 컬렉션에 추가합니다. pop(): 아직 제거되지 않은 가장 최근에 삽입된 요소를 제거합니다..

Python/알고리즘 2021.02.19

[파이썬 알고리즘 인터뷰] 16. 두 수의 덧셈

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 16. 두 수의 덧셈 리트코드 2. Add Two Numbers 문제입니다. 풀이 def addTwoNumbers(self, l1, l2): root = head = ListNode(0) carry = 0 while l1 or l2 or carry: sum = 0 if l1: sum += l1.val l1 = l1.next if l2: sum += l2.val l2 = l2.next carry, val = divmod(sum + carry,10) head.next = ListNode(val) head = head.next return root.next

Python/알고리즘 2021.02.19

[파이썬 알고리즘 인터뷰] 17. 페어의 노드 스왑

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 17. 페어의 노드 스왑 리트코드 24. Swap Nodes in Pairs 문제입니다. 풀이 1. 노드의 값만 변경하는 풀이입니다. def swapPaires(self, head): node = head while node and node.next: node.val, node.next.val = node.next.val, node.val node = node.next.next return head 2. 반복 구조로 스왑하는 풀이입니다. def swapPairs(self, head): prev = root = head prev.next = head while h..

Python/알고리즘 2021.02.19

[파이썬 알고리즘 인터뷰] 15. 역순 연결 리스트

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 15. 역순 연결 리스트 리트코드 206. Reverse Linked List 문제입니다. leetcode.com/problems/reverse-linked-list/ 풀이 node가 node.next로 이동함과 동시에 node.next를 prev로 연결합니다. def reverseList(self, head): rev, node = None, head while node: rev, rev.next, node = node, rev, node.next return rev

Python/알고리즘 2021.02.15

[파이썬 알고리즘 인터뷰] 14. 두 정렬 리스트의 병합

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 14. 두 정렬 리스트의 병합 리트코드 21. Merge Two Sorted Lists 문제입니다. 풀이 리트코드 디스커션에 직관적인 풀이가 있어서 가져와 봤습니다. 1. 반복문 풀이 def mergeTwoLists(self, l1, l2): dummy = cur = ListNode(0) while l1 and l2: if l1.val > l2.val: cur.next = l1 l1 = l1.next else: cur.next = l2 l2 = l2.next cur = cur.next cur.next = l1 or l2 return dummy.next 2. 재귀..

Python/알고리즘 2021.02.15

[파이썬 알고리즘 인터뷰] 13. 팰린드롬 연결 리스트

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 13. 팰린드롬 연결 리스트 리트코드 234. Palindrome Linked List 문제입니다. 풀이 문제 난이도는 easy 이지만, 연결 리스트에 대한 이해도가 부족하면 풀이 방법을 떠올리기 어렵습니다. 책에서는 두 가지 풀이방법을 제시합니다. 첫 번째는 연결 리스트를 리스트로 바꿔서 펠린드롬을 확인하는 풀이입니다. 두 번째는 연결 리스트의 중앙값을 기준으로 역순 연결 리스트를 만들고 값을 비교하는 풀이입니다. # 1. 리스트 변환 def isPalindrome(self, head): q = collections.deque() node = head whil..

Python/알고리즘 2021.02.15

[자료구조] 이중 연결 리스트를 파이썬으로 구현하기

저번 포스팅에서는 단일연결리스트를 파이썬으로 구현해보았습니다. 이번에는 이중연결리스트를 파이썬으로 구현해보도록 하겠습니다. [자료구조] 연결 리스트를 알아보고 파이썬으로 구현하기 이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 연결 리스트(Linked List) 연결 리스트는 데이터 요소의 선형 집합으로, 데이터의 순서 deep-learning-study.tistory.com 이중 연결 리스트(Doubly Linked List) # Doubly Linked List Implement # define ListNode class ListNode: def __init__(self, x): self.val = x self.next = None self.prec..

Python/알고리즘 2021.02.13

[자료구조] 연결 리스트를 알아보고 파이썬으로 구현하기

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 연결 리스트(Linked List) 연결 리스트는 데이터 요소의 선형 집합으로, 데이터의 순서가 메모리에 물리적인 순서대로 저장되지 않습니다. 연결 리스트는 배열과 함께 가장 기본이 되는 대표적인 선형 자료구조 중 하나로 다양한 추상 자료형 구현의 기반이 됩니다. 동적으로 새로운 노드를 삽입하거나 삭제하기가 간편하며, 연결 구조를 통해 물리 메모리를 연속적으로 사용하지 않아도 되기 때문에 관리가 쉽다는 장점이 있습니다. 연결 리스트는 배열과는 달리 특정 인덱스에 접근하기 위해서는 전체를 순서대로 읽어야 하므로 상수 시간에 접근할 수 없습니다. 즉 탐색에는 O(n)이 소요됩니다. 반면, 시작 또는 끝 지점에..

Python/알고리즘 2021.02.13

[파이썬 알고리즘 인터뷰] 12. 주식을 사고 팔기 가장 좋은 시점

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 12. 주식을 사고팔기 가장 좋은 시점 리트코드 121. Best Time to Buy and Sell Stock 문제입니다. leetcode.com/problems/best-time-to-buy-and-sell-stock/ 풀이 price의 최소값을 계속 갱신하면서, 가격 차이를 계산하여 차이가 클 경우 최대값을 저장하는 풀이입니다. def maxProfit(self, prices): profit = 0 min_price = sys.maxsize # 최소값과 최댓값을 계속 생신 for price in prices: min_price = min(min_price..

Python/알고리즘 2021.02.13
반응형