SR's Dev-Log

[Better Way #54] 스레드에서 데이터 경합을 피하기 위해 Lock을 사용하라

본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 07. Concurrency and Parallelism”을 읽고 정리한 내용입니다. GIL이 동시 접근을 보장해주는 락 역할을 해주는 것처럼 보이지만, 실제로는 그렇지 않다. 파이썬 스레드는 GIL로 인해 한 순간에 단 하나만 실행될 수 있으나, 파이썬...

[Algorithm] 유클리드 호제법(Euclidean Algorithm): 최대공약수(GCD)와 최소공배수(LCM) 구하기

유클리드 호제법(Euclidean Algorithm) 유클리드 호제법이란, 두 개의 양의 정수에 대해 최대공약수(GCD, greatest common divisor)를 구하는 알고리즘이다. “호제법”이라는 것은 두 수가 서로 상대방 수를 나누어 원하는 수를 얻는 알고리즘을 의미한다. 유클리드 호제법의 내용을 간단히 정리하면 다음과 같다...

[Better Way #51] 합성 가능한 클래스 확장이 필요하면 메타클래스보다는 클래스 데코레이터를 사용하라

본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 메타클래스는 서로 쉽게 합성할 수 없지만 클래스 데코레이터는 여러 개를 충돌 없이 사용할 수 있기 때문에, 클래스를 확장하면서 합성해야 할 때 클래스 데코레이터를 사용하는 ...

[Algorithm] Kadane’s Algorithm: 연속 부분 수열의 최대 합 구하기 (+ DP의 Space Complexity 최적화하기)

Maximum Subarray Problem Maximum Subarray Problem이란, 주어진 수열에 대해서 연속 부분 수열의 최대 합을 구하는 문제이다. 예제로 LeetCode 53. Maximum Subarray 문제의 첫 번째 예시를 살펴보면 다음과 같이 수열이 주어진다. 이때 maximum subarray는 노란색으로 하이라이트한 부...

[Python] Sequence에서 홀수 번 등장하는 원소 찾기 (w/ Hash Table)

어떤 sequence에 대해 홀수 번 등장하는 원소를 구하거나, 각 원소의 등장 횟수가 홀수 번인지 짝수 번인지 판단해야 하는 경우가 있다. 가장 나이브하게 생각하면 Counter를 만들고, 각 item을 순회하면서 확인하면 된다. 다른 방법으로는 hash table(Python의 경우, set)을 사용하는 방법이 있다. 간단히 이야기하면...