Floyd’s Cycle Detection이란? Floyd’s Cycle Detection 알고리즘은 속도가 다른 두 pointer를 이용하여 $O(1)$의 space complexity로 linked list에 cycle 혹은 loop가 존재하는지 여부를 검사하는 알고리즘이다. 이때, fast pointer는 slow pointer의 두 배 빠른...
[Algorithm] Floyd’s Cycle Detection: Linked List에 Cycle이 존재하는지 판단하기
[OOP] 추상화(상속, 다형성, 추상 타입)와 재사용
본문은 “개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴”(최범균 저)을 읽고 정리한 내용입니다. 이전 글에서 다뤘던 캡슐화란, 내부 구현의 유연함을 달성하는 방법이었다. 캡슐화에 대한 내용은 [링크]에서 확인 가능하다! 이번 글에서는 외부 구현의 유연함을 달성하는 방법인 추상화를 다뤄보자! ▼ 객체지향에서 구현...
[Better Way #50] __set_name__으로 클래스 애트리뷰트를 표시하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 메타클래스를 이용하면 클래스가 정의된 후, 클래스가 실제로 사용되기 이전 시점에 프로퍼티를 변경하거나 표시할 수 있다. 애트리뷰트가 포함된 클래스 내부에서 애트리뷰트...
[Better Way #49] __init_subclass__를 사용해 클래스 확장을 등록하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 메타클래스를 이용해 클래스를 확장하는 다른 용례로 프로그램이 자동으로 타입을 등록하는 것이 있다. 간단한 식별자를 이용해 그에 해당하는 클래스를 찾는 역검색을 하고 ...
[Better Way #48] __init_subclass__를 사용해 하위 클래스를 검증하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 1. 메타클래스의 가장 간단한 활용법 메타클래스의 대표적인 사용 목적은 어떤 클래스(하위 클래스)가 제대로 구현됐는지 검증하는 것이다. 복잡한 클래스 계층을 ...
[Python] Bitwise & 연산을 이용하여 여러 Dictionary 간 교집합 구하기
LeetCode의 383. Ransom Note를 풀다가 여러 dictionary 간의 intersection을 구하는 방법을 찾아보게 되었다. Bitwise Operators in Python 문서에 따르면, 파이썬의 bitwise operators는 다음의 built-in data type들에 대해 정의되어 있다고 한다. int b...
[Better Way #47] 지연 계산 애트리뷰트가 필요하면 __getattr__, __getattribute__, __setattr__을 사용하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. TL;DR __getattr__와 __setattr__를 사용해 객체의 애트리뷰트를 지연해 가져오거나 저장할 수 있다. __getattr__와 __...
[Better Way #46] 재사용 가능한 @property 메서드를 만들려면 디스크립터를 사용하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. TL;DR @property 메서드의 동작과 검증 기능을 재사용하고 싶다면 디스크립터 클래스를 만들어라. 디스크립터 클래스를 만들 때는 메모리 누수를 방지하...
[Python] heapq 우선순위 큐에서 최솟값 추출하기
heapq 우선순위 큐, 즉 최소힙에서 최솟값을 삭제하지 않고 얻으려면 [0] 인덱스를 통해 접근하면 된다. 왜냐하면 최소힙을 구성하는 과정(heapify)에서 매번 새로운 최솟값을 [0] 인덱스에 위치시키기 때문이다. 하지만 [1] 인덱스에 두 번째로 작은 원소, [2] 인덱스에 세 번째로 작은 원소가 들어있는 것은 아니다. 두 번째로 작은...
[Python] 파이썬의 동작 원리: 인터프리터 언어, 컴파일 언어, 그리고 CPython
1. 인터프리터 언어 vs. 컴파일 언어 1-1. 인터프리터 언어(Interpreted Language) 인터프리터를 통해 프로그래밍 언어의 소스 코드를 한 줄씩 읽어들이며 곧바로 실행하는 언어이다. 따라서 별도의 실행 파일이 생성되지 않는다. 인터프리터(interpreter) high-level 언...