본문 바로가기

Python/Algorithm

[Python] Linked List (2) Problem 14. Merge Two Sorted Lists https://leetcode.com/problems/merge-two-sorted-lists/ Solution 1. 재귀 구조 def merge_two_lists(self, l1: ListNode, l2: ListNode) -> ListNode: if (not l1) or (l2 and l1.val > l2.val): l1,l2 = l2,l1 if l1: l1.next = self.mergeTwoLists(l1.next, l2) return l1 Problem 15. Reverse Linked Lists https://leetcode.com/problems/reverse-linked-list/ Solution 1. 재귀 구조 def reve.. 더보기
[Python] Linked List (1) # typing hint 입력을 위한 라이브러리 호출 import typing Problem 13. Palindrome Linked List https://leetcode.com/problems/palindrome-linked-list/ 실행시간 비교 풀이 방식 Big-O 실행시간 순위 1 리스트 변환 O(n) 2위 2 데크를 이용한 최적화 O(n) 1위 Solution 1. 리스트 변환 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def isPalindrome_1(head: ListNode) -> bool: q: List = [] if not head: return True node = head.. 더보기
[Python] Array (2) In [1]: from typing import List, Set, Dict, Tuple Problem 9. 3Sum https://leetcode.com/problems/3sum/ 실행시간 비교 풀이 방식 Big-O 실행시간 순위 1 브루트 포스로 계산 O(n³) 2위 2 Two Pointer O(n²) 1위 Solution 1. 브루트 포스로 계산 In [8]: def three_sum_1(nums: List[int]) -> List[List[int]]: results = [] nums.sort() # 브루트 포스 3회 반복 for i in range(len(nums)-2): # 중복된 값 건너뛰기 if i > 0 and nums[i] == nums[i-1]: continue for j in rang.. 더보기
[Python] Array (1) Problem 7. Two Sum https://leetcode.com/problems/two-sum/ 풀이 방법 별 실행 시간 및 Big-O 비교 풀이 방식 Big-O 실행시간 순위 1 브루트 포스로 계산 O(n²) 5위 2 in을 이용한 탐색 O(n²) 4위 3 dictionary로 target - 1st value 조회 O(n) 공동 3위 4 dictionary로 조회 & for loop 단일화 O(n) 공동 3위 5 Two Pointer O(n) 1위 Solution 1. 브루트포스 가능한 모든 경우를 탐색하여 원하는 결과를 얻음 In [2]: # typing hint를 위한 라이브러리 호출 from typing import List, Set, Dict, Tuple In [39]: # 브루트포스 .. 더보기
[Python] 문자열 조작 Python 문자열 조작 출처 : 점프투파이썬 위키독스 https://wikidocs.net/4308 * 모든 문제는 leetcode에서 참조함* Problem 1. 유효한 팰린드롬 https://leetcode.com/problems/valid-palindrome/ Solution 1. 브루트포스 방식 In [1]: import re import collections class Solution_1(): def valid_palindrome_1(string: str) -> bool: # 가장 먼저 떠오른 풀이 string = string.lower() string = re.sub(r'^\w','',string) # 아래 두 풀이의 isalnum()은 브루트포스방식이지만 정규식 처리가 더 빠름 return.. 더보기