본문 바로가기

Python

[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 42. Trapping Rain Water 본 내용은 를 참고했습니다. 투 포인터를 최대 값으로 이동 class Solution: def trap(self, height: List[int]) -> int: left, right = 0, len(height)-1 left_max, right_max = 0, 0 volume = 0 while left < right: left_max, right_max = max(left_max, height[left]), max(right_max, height[right]) if height[left] < height[right]: volume += (left_max - height[left]) left += 1 else: volume += (right_max - height[right]) right -= 1 ret.. 더보기
[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 49 : Group Anagrams 본 내용은 를 참고했습니다. class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: anagram = collections.defaultdict(list) for word in strs: anagram[''.join(sorted(word))].append(word) return anagram.values() 이 문제에서 배워야할 포인트 for word in strs: anagram[''.join(sorted(word))].append(word) 정렬하여 딕셔너리에 추가 key: sorted(word), value: word 만약 존재하지 않는 키를 삽입하려 할 경우 KeyError가 발생하므로 defaultdict()로 구.. 더보기
[Python] Leet Code 819 : Most Common Word 본 내용은 를 참고했습니다. class Solution: def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: words = [word for word in re.sub(r'[^\w]', ' ', paragraph) .lower().split() if word not in banned] counts = collections.Counter(words) return counts.most_common(1)[0][0] 이 문제에서 배워야할 포인트 words = [word for word in re.sub(r'[^\w]', ' ', paragraph) .lower().split() if word not in banned] 정규표현식 입력 값에는 .. 더보기
[Python] Leet Code 937 : Reorder Log Files 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 937 : Reorder Log Files def reorderLogFiles(self, logs: List[str]) -> List[str]: letters, digits = [], [] for log in logs: if log.split()[1].isdigit(): digits.append(log) else: letters.append(log) letters.sort(key=lambda x: (x.split()[1:], x.split()[0])) return letters + digits 포인트 로그의 두번째 원소를 기준으로 .isdigit()을 사용하여 두 개의 리스트로 분류(letters, digits) lambda를 이용한 sort 문자가 동일한 .. 더보기
[Python] Leet Code 344 : Reverse String 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 344 : Reverse String def reverseString(self, s: List[str]) -> None: left, right = 0, len(s) - 1 while left None: s.reverse() 포인트 .reverse() 기법 사용 def reverseString(self, s: List[str]) -> None: s[:] = s[::-1] 포인트 본래 s = s[::-.. 더보기
[Python] Leet Code 125 : Valid Palindrome 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 125 : Valid Palindrome def isPalindrome(self, s: str) -> bool: strs = [] for char in s: if char.isalnum(): strs.append(char.lower()) while len(strs) > 1: if strs.pop(0) != strs.pop(): return False return True 포인트 .isalnum() : alphabet, number인지 판단 .pop(0) : 맨 앞 원소 pop, 그러나 O(n)으로 속도가 느림 def isPalindrome(self, s: str) -> bool: strs : Deque = collections.deque() for char .. 더보기
[Python] 딕셔너리(dictionary) | Ordereddict(), defaultdict(), Counter() 출처: 파이썬 알고리즘 인터뷰, 박상길 파이썬의 딕셔너리는 키/값 구조로 이루어진 딕셔너리를 말한다 내부적으로는 해시 테이블로 구현되어 있다. 딕셔너리의 주요 연산 시간 복잡도 len(a) : O(1) a[key] : O(1) a[key] = value : O(1) key in a : O(1) 파이썬 3.6 이하에서는 입력 순서가 유지되지 않다 collections.OrderedDict()를 제공했다. 파이썬 3.7부터는 내부적으로 인덱스를 이용해 입력 순서를 유지하도록 개선돼었다. collections.defaultdict() 조회 시 항상 디폴트 값을 생성해 키 오류를 방지한다. from collections import defaultdict def def_value(): return "Not Pre.. 더보기