본문 바로가기

프로그래머/Python

[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.. 더보기
[Python] 파이썬 문법 - is 와 ==의 차이 | python is & == 출처: 파이썬 알고리즘 인터뷰, 박상길 파이썬의 비교연산자 중 is와 ==가 있다. 이 둘은 파이썬의 객체 구조와 관련이 깊다. is id() 값을 비교하는 함수이다. None은 null로서 값 자체가 정의되어 있지 않으므로 ==로 비교불가하다. if a is None: pass == 값을 비교하는 연산자이다. 예시 a = [1, 2, 3] a == a # True a == list(a) # True a is a # True a is list(a) # False 값은 동일하지만 list()로 한 번 더 묶어주면, 별도의 객체로 복사되고 다른 id를 갖게 된다. 따라서 is는 False가 된다. a = [1, 2, 3] a == copy.deepcopy(a) # True a is copy.deepcopy(.. 더보기
[Python] print | .join() | f-string print문을 이용해 python에서 출력하는 여러가지 방법들 정리 print('A1', 'B2') # A1 B2 p print('A1', 'B2', sep=',') # A1, B2 print('aa', end=' ' ) print('bb') # aa bb a = ['A', 'B'] print(' '.join(a)) # A B idx = 1 fruit = "Apple" print('{0}: {1}'.format(idx + 1, fruit)) # 2: Apple print('{}: {}'.format(idx + 1, fruit)) # 2: Apple print(f'{idx+1}: {fruit}') # 2: Apple - f-string은 파이썬 3.6+에서만 지원한다. 더보기
[Python] range | generator의 방식을 활용하는 대표적 함수 ragne는 제너레이터의 방식을 활용하는 대표적인 함수이다. 주로 for 문에서 쓰이며 쓰임은 다음과 같다. list(range(5)) # [0, 1, 2, 3, 4] range(5) # type(range(5)) type(range(5)) # for i in range(5): print(i, end= ' ') # 0 1 2 3 4 a = [n for n in range(1000000)] b = range(1000000) len(a) # 1000000 len(b) # 1000000 len(a) == len(b) # True b # range(0, 1000000) type(b) # sys.getsizeof(a) # 8697464 sys.getsizeof(b) # 48 둘다 동일한 100만 개.. 더보기
[파이썬] 타입 힌트 | Type Hint | PEP 484 파이썬은 대표적인 동적 타이핑 언어임에도, 타입을 지정할 수 있는 타입 힌트가 PEP484 문서에 추가되었다. 형태는 다음과 같다. # 변수 a: str = "1" b: int = 1 # 함수 def fn(a: int) -> bool: 타입 힌트를 명시적으로 선언하게 되면 가독성이 좋아지면 버그 발생 확률을 줄일 수 있다. 실제로는 강제 규약이 아니다 보니, 여전히 동적으로 할강될 수 있으므로 주의가 필요하다. mypy를 사용하면 타입 힌트에 오류가 있는지 자동으로 확인할 수 있다 pip install mypy mypy solution.py 더보기