알고리즘 50

[파이썬 알고리즘 인터뷰][이진검색] 회전 정렬된 배열 검색

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 로그 재정렬 기준 책에서 구현된 코드 class Solution: def search(self, nums: List[int], target: int) -> int: # 예외 처리 if not nums: return -1 # 최소값 찾아 피벗 설정 left, right = 0, len(nums) - 1 while left nums[right]: left = mid + 1 else: right = mid pivot = left # 피벗 기준 이진 검색 left, right = 0, len(nums) - 1 wh..

책읽기 2021.08.13

[파이썬 알고리즘 인터뷰][이진검색] 이진 검색

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 배열에서 특정값 찾기 책에서 구현된 코드 # 반복문 class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left target: right = mid - 1 else: return mid return -1 # bisect class Solution: def search(self, nums: List[int], target: int) -> int: index = bisect.bisect_left(nums, target) if index < len(nums) and nums..

책읽기 2021.08.12

[파이썬 알고리즘 인터뷰] 18장 - 이진 검색

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 이진 검색 (Binary Search) 정렬된 배열에서 타겟을 찾는 검색 알고리즘 시간 복잡도 O(log n) 이진 탐색 트리(Binary Search Tree)와의 차이 이진 탐색 트리 - 정렬된 구조를 저장하고 탐색하는 '자료구조' 이진 검색 - 정렬된 배열에서 값을 찾아내는 '알고리즘' 이진 검색의 구현 mid를 구할 때 보통 (left+right) // 2를 사용 그러나 두 수의 합으로 인해 오버플로우가 발생할 수 있음 따라서 다음과 같이 구함 mid = left + (right - left) // 2

책읽기 2021.08.12

[파이썬 알고리즘 인터뷰][정렬] 원점에 K번째로 가까운 점

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 원점(0,0)으로부터 유클리드 거리가 가까운 순서 k개의 좌표 출력 책에서 구현된 코드 class Solution: def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]: heap = [] for (x, y) in points: dist = x ** 2 + y ** 2 heapq.heappush(heap, (dist, x, y)) result = [] for _ in range(K): (dist, x, y) = heapq.heappop(heap) result.append((x, y)) return result 기억해야할 기법 heapq..

책읽기 2021.08.07

[파이썬 알고리즘 인터뷰][정렬] 유효한 애너그램

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 t가 s의 애너그램인지 출력 책에서 구현된 코드 class Solution: def isAnagram(self, s: str, t: str) -> bool: return sorted(s) == sorted(t) 기억해야할 기법 문자열에 포함된 알파벳의 종류, 개수가 모두 일치하는지 확인하려면 정렬할 것 내가 구현한 코드 class Solution: def isAnagram(self, s: str, t: str) -> bool: return sorted(s) == sorted(t) 책과 일치

책읽기 2021.08.07

[파이썬 알고리즘 인터뷰][정렬] 가장 큰 수

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 숫자 배열을 이어붙여 만들 수 있는 가장 큰 수 출력 책에서 구현된 코드 class Solution: # 문제에 적합한 비교 함수 @staticmethod def to_swap(n1: int, n2: int) -> bool: return str(n1) + str(n2) str: i = 1 while i 0 and self.to_swap(nums[j - 1], nums[j]): nums[j], nums[j - 1] = nums..

책읽기 2021.08.07

[파이썬 알고리즘 인터뷰][정렬] 구간 병합

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 [start, end] 구간의 리스트가 주어질 때, 이 구간들의 겹치는 부분을 병합하여 출력 책에서 구현된 코드 class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: merged = [] for i in sorted(intervals, key=lambda x: x[0]): if merged and i[0] List[List[int]]: result = [] for start, end in sorted(intervals, key=lambda x: x[0]): if result and end

책읽기 2021.08.07

[파이썬 알고리즘 인터뷰][정렬] 리스트 정렬

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 연결 리스트 정렬 책에서 구현된 코드 class Solution: def sortList(self, head: ListNode) -> ListNode: # 연결 리스트 -> 파이썬 리스트 p = head lst: List = [] while p: lst.append(p.val) p = p.next # 정렬 lst.sort() # 파이썬 리스트 -> 연결 리스트 p = head for i in range(len(lst)): p.val = lst[i] p = p.next return head 기억해야할 기법 연결 리스트 정렬 방법 연결 리스트를 순차탐색하여 비교할값들의 배열로 바꿈 정렬 연결 리스트를 순차탐색하..

책읽기 2021.08.06