본문 바로가기

프로그래머/Python

[Python] Leet Code 206. Reverse Linked List 본 내용은 를 참고했습니다. 자료형 변환 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, lst: ListNode) -> ListNode: node, prev = lst, None while node: next, node.next = node.next, prev prev, node = node, next return prev def toList(self, node: ListNode) -> List: list: List = [] while node: lis.. 더보기
[Python] Leet Code 206. Reverse Linked List 본 내용은 를 참고했습니다. 재귀 구조로 뒤집기 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, head: ListNode) -> ListNode: def reverse(node: ListNode, prev: ListNode = None): if not node: return prev next, node.next = node.next, prev return reverse(next, node) return reverse(head) 이 문제에서 배워야 할 포.. 더보기
[Python] Leet Code 21. Merge Two Sorted Lists 본 내용은 를 참고했습니다. 리스트 변환 class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: if (not l1) or (l2 and l2.val < l1.val): l1, l2 = l2, l1 if l1: l1.next = self.mergeTwoLists(l1.next, l2) return l1 이 문제에서 배워야할 포인트 재귀활용!! python의 swap 작은 값을 무조건 l1에 더보기
[Python] Leet Code 234. Palindrome Linked List 본 내용은 를 참고했습니다. 리스트 변환 class Solution: def isPalindrome(self, head: ListNode) -> bool: q: List = [] if not head: return True node = head while node: q.append(node.val) node = node.next while len(q) > 1: if q.pop(0) != q.pop(): return False return True 이 문제에서 배워야할 포인트 일반 list에서의 popleft : .pop(0) 느림 데크를 이용한 최적화 class Solution: def isPalindrome(self, head: ListNode) -> bool: q: Deque = collections.. 더보기
[Python] Leet Code 121. Best Time to Buy and Sell Stock 본 내용은 를 참고했습니다. 저점과 현재 값과의 차이 계산 class Solution: def maxProfit(self, prices: List[int]) -> int: price_min = sys.maxsize profit = 0 for price in prices: price_min = min(price_min, price) profit = max(profit, price - price_min) return profit 이 문제에서 배워야할 포인트 파이썬에서 시스템상 최댓값 설정 sys.maxsize float(inf) min, max 내장함수 이용 더보기
[Python] Leet Code 238. Product of Array Except Self 본 내용은 를 참고했습니다. 왼쪽 곱셈 결과에 오른쪽 값을 차례대로 곱셈 class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: out = [] prod = 1 for idx in range(0, len(nums)): out.append(prod) prod *= nums[idx] prod = 1 for idx in range(len(nums)-1, -1, -1): out[idx] = out[idx]*prod prod = prod*nums[idx] return out 이 문제에서 배워야할 포인트 나눗셈을 하지 않고 O(n)에 풀이해야 한다 풀이 방법은 한 가지 뿐이다. 자기 자신을 제외하고 왼쪽의 곱셈 결과와 오른쪽의 곱셈 결과.. 더보기
[Python] Leet Code 561. Array Partition I 본 내용은 를 참고했습니다. 파이썬다운 방식 class Solution: def arrayPairSum(self, nums: List[int]) -> int: return sum(sorted(nums)[::2]) 이 문제에서 배워야할 포인트 파이썬다운 방식으로 풀면 한 줄로 해결이 가능하다. 풀이 방식은 리스트를 정렬한 후, 두 개씩 묶어 작은 값의 합을 구하는 것이다. 결국 묶을 필요 없이, 홀수 번째의 값을 두 칸씩 건너 뛰어 더해주면 된다. 더보기
[Python] Leet Code 15. 3Sum 본 내용은 를 참고했습니다. 투 포인터 활용 class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: output = [] nums = sorted(nums) for i in range(len(nums)-2): if (i > 0) and nums[i] == nums[i-1]: continue left, right = i+1, len(nums)-1 while left 0: right -= 1 else: output.append([nums[left], nums[right], nums[i]]).. 더보기
[Python] Leet Code 1. Two Sum 본 내용은 를 참고했습니다. 풀이 1. 브루트 포스(가장 느림) class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)-1): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return [i, j] 풀이 2. in을 이용한 탐색 class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i, a in enumerate(nums): b = target - a if b in nums[i+1:]: return[nums.index(a).. 더보기
[Python] Leet Code 5. Longest Palindromic Substring 본 내용은 를 참고했습니다. class Solution: def longestPalindrome(self, s: str) -> str: if len(s) = 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return s[left+1:right] result = '' for i in range(len(s)-1): result = max(result, expandStr(i,i+1), expandStr(i,i+2), key=len) return result 이 문제에서 알아야할 포인트 if len.. 더보기