책읽기 138

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

이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다. 문제 정의 배열에서 특정값 찾기 책에서 구현된 코드 # 반복문 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

[Java의 정석][Chapter-6] 객체지향 프로그래밍1 (2/2)

이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다. 4. 오버로딩(overloading) 1) 오버로딩 오버로딩 정의 같은 이름의 메서드를 여러 개 정의하는 것 과적하다라는 뜻으로, 하나의 메서드 이름으로 여러 기능을 구현하기 때문 오버로딩의 조건 메서드 이름이 같아야함 매개변수의 개수 / 타입이 달라야 함 오버로딩이 성립하지 않는 경우 매개변수명만 다른 경우 리턴타입만 다른 경우 오버로딩의 장점 근본적으로 같은 기능이지만 다른 이름을 짓는 경우 메서드 작성자는 이름을 잘 지어야함 메서드 사용자는 여러 이름을 기억해야함 2) 가변인자와 오버로딩 가변인자(varargs) 사용법 타입... 변수명 - public PrintStream printf(String format, Ob..

책읽기 2021.08.09

[Java의 정석][Chapter-6] 객체지향 프로그래밍1 (1/2)

이 글은 "Java의 정석 (남궁 성 지음)"을 읽고 주관적으로 요약한 글입니다. 1. 객체지향 언어 과학자들의 모의실험을 위해 가상 세계를 컴퓨터 속에 구현하며 객체지향이론 탄생 객체지향이론의 기본 개념 실세계는 사물(객체)로 이루어져있고, 발생하는 모든 사건은 사물간의 상호작용이다 객체지향언어 코드 간의 서로 관계를 지어 유기적으로 프로그램을 구성하는 것이 가능해짐 객체지향언어의 특징 코드의 재사용율이 높음 - 기존 코드를 이용하여 쉽게 작성 코드 관리가 용이 - 코드간의 관계를 이용하여 쉽게 코드 변경 신뢰성이 높은 프로그래밍 - 제어자/메서드로 데이터 보호, 올바른 값 유지 및 코드 불일치로 인한 오작동 방지 2. 클래스와 객체 1) 클래스와 인스턴스의 정의 클래스 객체를 정의해놓은 것 객체의 설..

책읽기 2021.08.09

[파이썬 알고리즘 인터뷰][정렬] 원점에 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