반응형

Python/알고리즘 52

[파이썬 알고리즘 인터뷰] 11. 자신을 제외한 배열의 곱

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 11. 자신을 제외한 배열의 곱 리트코드 238. Product of Array Except Self 문제입니다. leetcode.com/problems/product-of-array-except-self/ 풀이 모든 nums 값을 곱한 다음에 nums[i]로 나눠주는 풀이를 떠올렸지만, 나눗셈을 하지 않는 제약조건이 있어서 다른 방법을 생각해야 했습니다. 도저히 생각이 안나서 책에 있는 풀이를 참고했습니다. 책에는 왼쪽 곱셈 결과에 오른쪽 곱셈 결과를 곱하는 풀이방법이 나와있었습니다. def productExceptSelf(self, nums): p = 1 o..

Python/알고리즘 2021.02.13

[파이썬 알고리즘 인터뷰] 10. 배열 파티션 I

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 10. 배열 파티션 I 리트코드 561번 문제입니다. leetcode.com/problems/array-partition-i/ 풀이 nums를 정렬하고 for문으로 짝수 index를 가져옵니다. 해당 index와 다음 index의 값중 최소값을 results에 추가한 뒤 모든 값을 더해서 return 합니다. def arrayPairSum(self, nums): nums.sort() results = [] for i in range(0,len(nums),2): results.append(min(nums[i],nums[i+1])) return sum(results..

Python/알고리즘 2021.02.12

[파이썬 알고리즘 인터뷰] 8. 빗물 트래핑

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 8. 빗물 트래핑 리트코드 42번 문제입니다. leetcode.com/problems/trapping-rain-water/ 풀이 hard 문제답게 손도 못대보았습니다. 책에는 두 가지 풀이법이 제시되었습니다. 1. 투포인터를 활용한 풀이 양쪽의 포인터가 제일 높은 높이를 향해서 한 칸씩 이동합니다. 이동하면서 이전 값과 현재 값의 차이로 물의 양을 계산합니다. def trap(self, height): if not height: return 0 left, right = 0, len(height)-1 left_max, right_max = height[left],..

Python/알고리즘 2021.02.12

[파이썬 알고리즘 인터뷰] 7. 두 수의 합

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 7. 두 수의 합 리트코드 1번 문제입니다. leetcode.com/problems/two-sum/ 풀이 딕셔너리를 활용한 풀이입니다. 키를 num, 값을 인덱스로 저장합니다. for 문으로 nums에서 num을 하나하나씩 꺼내보면서 딕셔너리에 target - num에 해당하는 키가 존재하는지 확인합니다. def twoSum(self, nums, target): nums_map = {} for i, num in enumerate(nums): if target - num in nums_map: return [nums_map[target - num], i] nums..

Python/알고리즘 2021.02.11

[자료구조] 배열 - 동적 배열, 정적 배열

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 배열 배열은 값 또는 변수 엘리먼트의 집합으로 구성된 구조로 하나 이상의 인덱스 또는 키로 식별됩니다. 자료구조는 크게 메모리 공간 기반의 연속 방식과 포인터 기반의 연결 방식으로 나뉩니다. 배열은 연속 방식의 가장 기본이 되는 자료형 입니다. 연결 방식의 가장 기본이 되는 자료형은 연결 리스트 입니다. 추상 자료형의 실제 구변 대부분은 배열 또는 연결 리스트를 기반으로 합니다. 예를 들어 스택은 연결 리스트로 구현하고, 큐는 배열로 구현하는 식 입니다. 물론 반대의 경우도 가능합니다. 배열의 장점으로는 어느 위치에나 O(1)에 조회가 가능하다는 장점이 있습니다. C 언어에서의 배열 - 정적 배열 C언어에..

Python/알고리즘 2021.02.10

[파이썬 알고리즘 인터뷰] 6. 가장 긴 팰린드롬 부분 문자열

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 코드 출처 : 파이썬 알고리즘 인터뷰 깃허브 6. 가장 긴 팰린드롬 부분 문자열 리트코드 5번 문제입니다. leetcode.com/problems/longest-palindromic-substring/ 풀이 팰린드롬은 홀수, 짝수 펠린드롬으로 나눠서 생각해 볼 수 있습니다. 책에서는 홀수, 짝수 펠린드롬을 각각 판별하도록 풀어냈습니다. 펠린드롬을 판별하는 함수를 정의하고 홀수, 짝수 펠린드롬을 문자열 처음부터 판별해나갑니다. max 함수에 key 인자를 len으로 입력하여 문자열 길이를 기준으로 최대값을 취할 수 있다는 것을 배웠습니다. def longestPalindrome(self, s): # 팰린드롬..

Python/알고리즘 2021.02.10

[파이썬 알고리즘 인터뷰] 5. 그룹 애너그램

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 5. 그룹 애너그램 리트코드 49번 문제입니다. leetcode.com/problems/group-anagrams/ 풀이 dictionary의 키에 정렬된 strs 입력하고 값을 정렬되지 않은 strs 입력한다는게 신선했습니다. sorted 함수는 list 값을 반환하므로 딕셔너리의 key로 지정할 수 없습니다. 따라서 join 함수로 리스트를 제거하여 key로 입력합니다. def groupAnagrams(self, strs): anagrams = collections.defaultdict(list) for word in strs: # list 벗기기 위해 .join 이용 anagrams[''.join(s..

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 4. 가장 흔한 단어

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 4. 가장 흔한 단어 리트코드 819번 문제입니다. leetcode.com/problems/most-common-word/ 풀이 paragraph를 전처리 하는 과정이 핵심이었습니다. banned에 해당하는 문자와 특수기호, 띄어쓰기를 제거해야 합니다. 파이썬 리스트컴프리헨션을 이용해 한줄로 전처리하는 코드가 인상깊었습니다. def mostCommonWord(self, paragraph, banned): words = [word for word in re.sub(r'[^\w]',' ',paragraph) .lower().split() if word not in banned] counts = collecti..

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 3. 로그 파일 재정렬

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 3. 로그 파일 재정렬 리트코드 937번 문제입니다. 풀이 sort함수 key인자에 lambda를 활용하여 [1] 인덱스 기준으로 정렬하고 값이 동일하면 [0] 인덱스로 정렬하도록 하는 것이 핵심이었습니다. def reorderLogFiles(self, logs): digits, letters = [], [] for log in logs: if log[1].isdigit(): digits.append(log) else: letters.append(log) letters.sort(key=lambda x: (x.split()[1], x.split()[0])) return letters + digits

Python/알고리즘 2021.02.09

[파이썬 알고리즘 인터뷰] 2. 문자열 뒤집기

이 포스팅은 파이썬 알고리즘 인터뷰를 공부하면서 정리한 내용입니다. 출처 : 파이썬 알고리즘 인터뷰 2. 문자열 뒤집기 문제 : 문자열을 뒤집는 함수를 작성하는 문제입니다. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 조작해야 합니다. 풀이 1. 투포인터를 이용한 풀이 주어진 문자열 슬라이싱에서 왼쪽, 오른쪽 포인터를 설정하고 해당하는 문자를 바꿔주는 풀이입니다. def reverseString(s): left, right = 0, len(s)-1 while left < right: s[left], s[right] = s[right], s[left] left += 1 right -= 1

Python/알고리즘 2021.02.09
반응형