정규식과 NumPy: 텍스트에서 수치를 추출해 배열로 계산하기
·
알고리즘/이론
강의일: 2026-09-18 · 사용자 지정 강의일 기준으로 자료를 정리한 학습 노트정규식은 텍스트에서 구조를 찾고, NumPy는 추출한 수치를 배열로 계산한다. 두 도구를 연결할 때는 무엇을 유효한 입력으로 인정할지, 어떤 dtype과 shape으로 바꿀지, 실패한 입력을 어떻게 처리할지를 먼저 정한다.1. 검색과 검증은 다르다함수의미반환re.match문자열 시작에서 패턴을 맞춤Match 또는 Nonere.search일치하는 첫 위치를 찾음Match 또는 Nonere.fullmatch문자열 전체가 패턴인지 검사Match 또는 Nonere.findall모든 비중첩 일치를 모음문자열 또는 캡처 그룹들의 리스트re.finditer모든 비중첩 Match를 순차 반환반복자match는 시작 위치를 제한할 뿐 끝까..
제너레이터와 비동기: 값을 만드는 시점과 기다리는 방식
·
알고리즘/이론
강의일: 2026-09-17 · 강의 자료를 바탕으로 개념과 예제를 재구성한 학습 노트제너레이터는 필요한 시점에 다음 값을 만든다. 비동기는 기다리는 동안 다른 작업을 진행한다. 둘 다 실행을 중단했다가 이어갈 수 있지만, 제너레이터를 썼다고 I/O가 자동으로 비동기가 되는 것은 아니다.1. iterable과 iterator반복 가능한 객체(iterable)는 iter(obj)로 반복자를 얻을 수 있다. 반복자(iterator)는 next(it)로 다음 값을 내놓고, 끝나면 StopIteration을 발생시킨다. 리스트는 반복 가능하지만 그 자체가 반복자는 아니다. [강의: 6–13쪽]values = [10, 20]it = iter(values)assert next(it) == 10assert list(..
정렬: 불변식, 안정성, 파이썬 구현 비용
·
알고리즘/이론
강의일: 2026-09-16 · 강의 자료를 바탕으로 개념과 예제를 재구성한 학습 노트정렬 알고리즘을 구분하는 좋은 질문은 한 단계가 끝나면 어느 부분이 확정되는가다. 버블은 뒤쪽 최댓값, 선택은 앞쪽 최솟값을 확정한다. 삽입은 정렬된 접두 구간을 넓힌다. 병합은 정렬된 두 구간을 합치고, 퀵은 피벗을 기준으로 원소를 분할한다.1. 시간만큼 중요한 비교 기준안정 정렬은 정렬 키가 같은 원소의 기존 상대 순서를 보존한다. 제자리 정렬은 보조 저장 공간을 적게 쓰는 성질이다. 둘은 별개다. 비교 횟수뿐 아니라 이동, 슬라이싱, 리스트 앞쪽 삭제, 재귀 스택까지 구현 비용에 포함해야 한다.알고리즘최선평균최악추가 공간안정성: 아래 구현 기준버블, 조기 종료 있음O(n)O(n²)O(n²)O(1)안정삽입O(n)O(..
DP: 상태와 점화식으로 중복 계산 줄이기
·
알고리즘/이론
강의일: 2026-09-15 · 강의 자료를 바탕으로 개념과 예제를 재구성한 학습 노트DP(Dynamic Programming, 동적 계획법)의 출발점은 무엇을 저장할 것인가다. 같은 의미의 작은 문제를 여러 번 풀고 있다면, 그 답을 상태별로 저장한 뒤 다시 사용한다. 피보나치에서는 이전 두 항, 이항계수에서는 이전 행, 거스름돈에서는 더 작은 금액이 다음 답의 근거가 된다.1. 재귀 호출 트리에서 상태 의존 관계로F(n) = F(n-1) + F(n-2)를 그대로 재귀 호출하면 F(n-2) 이하가 여러 경로에서 반복된다. 호출 횟수는 지수적으로 늘지만 서로 다른 상태는 0부터 n까지뿐이다. 같은 상태의 답을 재사용하면 중복 계산을 제거할 수 있다. [강의: 11–16쪽]구분먼저 하는 일저장·호출 비용주..
ChatGPT 사용량을 Mac 메뉴 막대에: Codex 한도·초기화 시간 앱 만들기
·
구현
Claude Usage 앱을 사용하다 ChatGPT로 옮기면서, 메뉴 막대에서 남은 한도를 확인하는 기능이 아쉬웠다. 그래서 Codex와 함께 ChatGPT Usage라는 작은 macOS 앱을 만들었다.앱이 보여주는 것은 ChatGPT 계정에 연결된 Codex 구독 한도와 초기화 시간이다. 일반 ChatGPT 대화의 모델별 메시지 한도나 OpenAI API 사용 요금을 보여주는 앱은 아니다. 이름만 보고 기능 범위를 오해하지 않도록 먼저 밝혀 둔다.GitHub 소스와 설치 안내 · 실험용 릴리스 다운로드만들기 전에 확인한 것: 비슷한 앱은 이미 있었다처음에는 ChatGPT용 사용량 앱이 없다고 생각했다. 하지만 공개 프로젝트를 찾아보니 CodexBar, Codex Usage Bar 같은 앱이 이미 있었다..
최단 경로, 다익스트라, 벨만-포드, 플로이드-워셜
·
알고리즘/이론
가중치가 전부 같으면 BFS 가 최단 경로다. 가중치가 달라지는 순간 그 보장이 깨지고, 그때 꺼내는 이름이 셋이다 — 다익스트라, 벨만-포드, 플로이드-워셜. 이름이 셋이라 알고리즘도 셋인 것처럼 보이는데, 코드를 놓고 보면 세 개가 전부 같은 한 줄을 돌린다.if dist[u] + w u 까지 온 거리에 간선 하나를 붙이면 v 가 더 가까워지는가. 그렇다면 v 의 거리를 줄인다. 이것을 완화(relax) 라 부르고, 세 알고리즘의 차이는 어떤 간선을 어떤 순서로 완화하느냐 뿐이다. 가장 가까운 정점부터(다익스트라), 모든 간선을 V-1 번(벨만-포드), 경유 정점을 하나씩 늘리며 모든 쌍(플로이드-워셜). 그 순서의 차이가 음수 가중치를 견디는지, 모든 쌍을 구하는지, 파이썬에서 어디서 무너지는지를 ..
최소 신장 트리, 크루스칼과 프림
·
알고리즘/이론
도시 일곱 개를 도로로 전부 잇는데 공사비를 가장 적게 쓰고 싶다. 후보 도로는 열한 개, 각각 비용이 다르다. 어느 여섯 개를 고르는가 — 이것이 최소 신장 트리(MST, Minimum Spanning Tree) 문제다.네트워크 배선, 배관, 클러스터링, 그리고 코딩 테스트의 단골이다. 푸는 방법은 둘이다.크루스칼은 도로를 싼 순서로 늘어놓고 "이걸 놓으면 빙 도는 길이 생기는가"만 보며 고른다.프림은 도시 하나에서 출발해 "지금까지 연결된 동네에서 가장 싸게 닿는 새 도시"를 하나씩 붙인다. 고르는 순서가 완전히 다른데 같은 트리에 도착한다. 이 글은 그 두 알고리즘을 원본 자료의 코드로 한 단계씩 따라가고, "왜 둘 다 정답인가"를 컷 속성 하나로 묶은 뒤, 파이썬에서 실제로 재 본 숫자를 얹는다...
서로소 집합과 유니온 파인드
·
알고리즘/이론
"이 두 원소가 같은 그룹에 속하는가." 이 질문 하나만 빠르게 답하면 되는 문제가 생각보다 많다. 네트워크에서 두 컴퓨터가 연결돼 있는지, 격자에서 두 칸이 같은 덩어리인지, 간선을 하나 더 놓으면 사이클이 생기는지 — 전부 같은 질문이다.서로소 집합(Disjoint-set) 은 이 한 가지 질문에 특화된 자료구조다. 집합마다 대표자 를 한 명 뽑아 두고, 질문을 "두 원소의 대표자가 같은가"로 바꾼다. 구현은 정수 배열 하나면 끝난다.이 글의 절반은 그 배열 위에 얹는 최적화 두 개 이야기다. 코드로는 세 줄 남짓인데, 안 켜면 어떻게 되는지 실제로 재 봤더니 이런 숫자가 나왔다.원소 100,000개에 무작위 union 200,000회 + 연결 질의 200,000회최적화 없음 : 489,594.6 m..