Python 프로젝트를 Poetry에서 UV로 마이그레이션하기: 10배 빠른 의존성 관리
·
Programming/Python
들어가며 Python 프로젝트를 운영하다 보면 의존성 관리 도구의 성능이 생산성에 큰 영향을 미친다는 것을 체감하게 됩니다. 특히 CI/CD 파이프라인에서 매번 의존성을 설치할 때마다 수 분씩 기다리는 것은 큰 스트레스입니다.이 프로젝트는 원래 Poetry를 사용하고 있었습니다. Poetry는 훌륭한 도구이지만, 대규모 프로젝트에서 다음과 같은 문제가 있었습니다:Poetry의 문제점:의존성 해결(resolution)이 느림 (Python으로 작성되어 있어 느린 편)CI/CD에서 매번 3~5분씩 소요lock 파일 업데이트 시 오래 걸림가상환경 관리가 복잡함이런 이유로 UV로 마이그레이션을 결정했습니다. UV는 Rust로 작성된 최신 Python 패키지 관리자로, Poetry 대비 10~100배 빠른 성능을..
Upbit으로 비트코인 24시간 분석하기: 암호화폐 자동매매의 시작점
·
Programming/Python
이 글은 AI 기반 자동매매 시스템 시리즈의 3편입니다.전체 시리즈:1편: 한투 API로 실시간 주식 데이터 수집하기2편: yfinance로 애플·테슬라 분석하기3편: Upbit으로 비트코인 24시간 분석하기 ← 현재 글4편: AI 분석 결과 DB에 저장하기들어가며지금까지 한투 API로 국내 주식, yfinance로 해외 주식 데이터를 수집하고 AI 분석하는 방법을 알아봤습니다. 이번에는 시리즈의 마지막 편으로 Upbit API를 활용한 암호화폐 자동 분석을 다룹니다.제가 암호화폐 시장을 선택한 이유는 명확합니다. 암호화폐 시장은 24시간 365일 개장하기 때문에, 자동매매 시스템을 개발하고 배포한 직후 바로 실전에서 테스트할 수 있습니다. 주식 시장처럼 장 마감을 기다릴 필요 없이, 코드를 수정하면 몇..
프로그래머스 거리두기 확인하기 - 반례 검증기
·
Programming/코딩 테스트
문제 링크 → 프로그래머스 - 거리두기 확인하기문제는 5x5 대기실에서 사람이 서로 맨해튼 거리 2 이내에 있으면서 가림막 없이 마주보면 거리두기 위반으로 간주하는 것이다. 간단히 말해:P끼리 인접(맨해튼 거리 1)해 있으면 무조건 위반P끼리 맨해튼 거리 2일 때, 그 사이가 O 또는 X냐에 따라 다름O는 빈자리, X는 파티션(가림막)✅ 내가 작성한 풀이나는 BFS를 사용하지 않고, 단순한 조건문 기반의 전수 조사 방식으로 풀었다. 핵심은 두 가지 조건이다:사람(P)이 상하좌우로 붙어 있으면 위반빈자리(O) 기준으로 상하좌우에 P가 2명 이상 붙어 있으면 위반def solution(places): answer = [] for place in places: people = set()..
frozenset 완전 이해하기 — 순서를 무시한 조합 비교와 해시 계산
·
Programming/Python
Python의 frozenset은 잘 알려진 set의 불변(immutable) 버전으로, 순서를 무시한 조합을 비교하거나 해시 가능한 자료구조로 사용할 때 매우 유용합니다. 이 글에서는 frozenset의 개념, 동작 방식, 해시 계산 구조를 깊이 있게 알아봅니다.🧊 frozenset이란?frozenset은 수정할 수 없는(settable하지 않은) 집합입니다.set과 거의 동일하게 동작하지만, immutable 하기 때문에 dict의 key 또는 set의 원소로 사용할 수 있습니다.s = set()s.add(set([1, 2])) # ❌ TypeErrors.add(frozenset([1, 2])) # ✅ 가능✅ 왜 frozenset을 쓸까?1. 조합의 중복 제거에 유리combo1 = frozens..
Python 정규표현식 완전 정복 (re.match, ^\$, re.compile 완전 이해)
·
Programming/Python
Python에서 정규표현식은 문자열 패턴 매칭에 매우 강력한 도구입니다. 특히 코딩 테스트나 실무에서 빠르고 정확하게 문자열을 필터링하거나 추출하고 싶을 때 필수입니다. 이 글에서는 re.match, ^, $, re.compile()의 개념을 예제와 함께 정리합니다.🔍 기본 용어 정리문법의미예시.아무 문자 하나a.c → abc, axc 매칭*앞 문자가 0개 이상 반복a*b → b, ab, aab^문자열의 시작^abc → abc 매칭, xabc는 X$문자열의 끝abc$ → abc 매칭, abcc는 X✅ re.match vs re.fullmatch vs re.search함수설명예시re.match()문자열의 시작부터 패턴 매칭re.match("a.c", "abc") ✅re.fullmatch()문자열 전체가 ..
프로그래머스 불량 사용자 문제 풀이 (Python + 정규식 + DFS)
·
Programming/코딩 테스트
프로그래머스 Level 3 문제인 불량 사용자는 정규표현식과 조합, 그리고 백트래킹(DFS)에 대한 이해가 필요한 문제입니다. 이 글에서는 문제 해결 과정을 단계별로 소개하고, 핵심 개념들을 요약합니다.🔍 문제 요약user_id: 사용자들의 ID 리스트banned_id: 불량 사용자 패턴 리스트 ( * 는 와일드카드 )조건에 맞는 사용자 ID 조합의 경우의 수를 구하라 (중복 없이)🧠 핵심 아이디어banned_id의 각 패턴을 정규식으로 변환각 패턴에 매칭되는 user_id 후보 리스트 생성DFS를 사용해 가능한 조합을 탐색조합이 중복되지 않도록 frozenset을 활용하여 정답 저장✅ 최종 풀이 코드 (Python)import redef solution(user_id, banned_id): a..
[프로그래머스] 행렬 테두리 회전하기 - 시행착오에서 배운 효율적인 풀이
·
Programming/코딩 테스트
문제 링크 → 프로그래머스✅ 문제 개요rows x columns 크기의 행렬이 주어지고,여러 개의 queries가 주어지며,각 query는 (x1, y1, x2, y2) 형태로, 직사각형 테두리를 시계방향으로 회전시키는 명령입니다.회전한 후 테두리에서 가장 작은 수를 리턴하는 배열을 구하는 문제입니다.❌ 처음엔 딕셔너리로 풀었다 (비효율의 늪)처음에는 행렬을 다음처럼 dict[(i, j)] 구조로 만들고,matrix = {}count = 1for i in range(1, rows + 1): for j in range(1, columns + 1): matrix[(i, j)] = count count += 1회전을 처리할 때는 한 query마다 전체 딕셔너리를 copy() 해서..
프로그래머스 Lv2 - 메뉴 리뉴얼 풀이 및 Counter 설명
·
Programming/코딩 테스트
문제 링크✅ 문제 요약여러 손님들의 주문 내역이 주어지고,course 배열에 명시된 개수로 구성된 메뉴 조합 중에서,최소 2명 이상의 손님에게 주문된 조합을 뽑되,가장 많이 선택된 조합만 추려내서 정렬된 결과를 반환하는 문제입니다.✨ 핵심 아이디어조합을 뽑을 때 itertools.combinations를 사용조합 등장 횟수는 collections.Counter로 관리각 course 크기마다 가장 자주 등장한 조합을 선별💻 코드 풀이import itertoolsfrom collections import Counterdef solution(orders, course): result = [] for course_size in course: comb_counter = Counter() ..
프로그래머스 괄호 문제 풀이: 스택으로 푸는 방법
·
Programming/코딩 테스트
괄호 문자열의 유효성을 검사하는 문제는 자료구조 중 하나인 스택(Stack)을 이해하는 데 아주 좋은 예시입니다. 이번 글에서는 프로그래머스의 "올바른 괄호" 문제를 스택으로 해결하는 방법과, 코드 최적화 아이디어를 함께 정리해보겠습니다.👉 문제 링크: 프로그래머스 - 올바른 괄호🧠 문제 요약주어진 문자열 s는 괄호로만 구성되어 있습니다. 괄호가 짝지어 올바르게 구성되어 있는지 판별하는 함수를 작성해야 합니다.예시 1: "()()" → True예시 2: "(())()" → True예시 3: ")()(" → False예시 4: "(()(" → False✅ 핵심 아이디어: 스택여는 괄호 ("를 만나면 스택에 push닫는 괄호 ")"를 만나면 스택에서 pop단, 스택이 비어있다면 → 잘못된 괄호 → Fal..
[프로그래머스] 이모티콘 할인행사 - 백트래킹 + 가지치기 풀이
·
Programming/코딩 테스트
🏝️ 문제 개요문제 링크: 프로그래머스 - 이모티콘 할인행사문제 요약:maps라는 문자열 2차원 배열에서 'X'가 아닌 숫자들은 음식량을 의미하며, 상하좌우로 연결된 땅 덩어리(무인도)를 찾아 음식 총합을 구한 후 오름차순으로 정렬하는 문제.❓ 문제 요약각 유저는 할인율 기준과 이모티콘 플러스 가입 기준 금액을 가짐이모티콘마다 할인율을 10%, 20%, 30%, 40% 중 하나로 정해야 함목표는:이모티콘 플러스 가입자를 최대화동일한 수일 경우, 이모티콘 판매액을 최대화🧠 접근 방법기본적으로는 할인율 조합을 모두 탐색해야 함 → 4ⁿ 조합하지만:이모티콘 수가 많아지면 조합 수가 급격히 증가itertools.product로는 모든 조합을 한 번에 생성하기 때문에 최적화 불가따라서 재귀(DFS) + 가지치..