반응형

python 8

프로그래머스 거리두기 확인하기 - 반례 검증기

문제 링크 → 프로그래머스 - 거리두기 확인하기문제는 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 완전 이해하기 — 순서를 무시한 조합 비교와 해시 계산

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..

Programming/Python 2025.07.18

Python 정규표현식 완전 정복 (re.match, ^\$, re.compile 완전 이해)

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()문자열 전체가 ..

Programming/Python 2025.07.18

프로그래머스 불량 사용자 문제 풀이 (Python + 정규식 + DFS)

프로그래머스 Level 3 문제인 불량 사용자는 정규표현식과 조합, 그리고 백트래킹(DFS)에 대한 이해가 필요한 문제입니다. 이 글에서는 문제 해결 과정을 단계별로 소개하고, 핵심 개념들을 요약합니다.🔍 문제 요약user_id: 사용자들의 ID 리스트banned_id: 불량 사용자 패턴 리스트 ( * 는 와일드카드 )조건에 맞는 사용자 ID 조합의 경우의 수를 구하라 (중복 없이)🧠 핵심 아이디어banned_id의 각 패턴을 정규식으로 변환각 패턴에 매칭되는 user_id 후보 리스트 생성DFS를 사용해 가능한 조합을 탐색조합이 중복되지 않도록 frozenset을 활용하여 정답 저장✅ 최종 풀이 코드 (Python)import redef solution(user_id, banned_id): a..

[프로그래머스] 행렬 테두리 회전하기 - 시행착오에서 배운 효율적인 풀이

문제 링크 → 프로그래머스✅ 문제 개요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 설명

문제 링크✅ 문제 요약여러 손님들의 주문 내역이 주어지고,course 배열에 명시된 개수로 구성된 메뉴 조합 중에서,최소 2명 이상의 손님에게 주문된 조합을 뽑되,가장 많이 선택된 조합만 추려내서 정렬된 결과를 반환하는 문제입니다.✨ 핵심 아이디어조합을 뽑을 때 itertools.combinations를 사용조합 등장 횟수는 collections.Counter로 관리각 course 크기마다 가장 자주 등장한 조합을 선별💻 코드 풀이import itertoolsfrom collections import Counterdef solution(orders, course): result = [] for course_size in course: comb_counter = Counter() ..

프로그래머스 괄호 문제 풀이: 스택으로 푸는 방법

괄호 문자열의 유효성을 검사하는 문제는 자료구조 중 하나인 스택(Stack)을 이해하는 데 아주 좋은 예시입니다. 이번 글에서는 프로그래머스의 "올바른 괄호" 문제를 스택으로 해결하는 방법과, 코드 최적화 아이디어를 함께 정리해보겠습니다.👉 문제 링크: 프로그래머스 - 올바른 괄호🧠 문제 요약주어진 문자열 s는 괄호로만 구성되어 있습니다. 괄호가 짝지어 올바르게 구성되어 있는지 판별하는 함수를 작성해야 합니다.예시 1: "()()" → True예시 2: "(())()" → True예시 3: ")()(" → False예시 4: "(()(" → False✅ 핵심 아이디어: 스택여는 괄호 ("를 만나면 스택에 push닫는 괄호 ")"를 만나면 스택에서 pop단, 스택이 비어있다면 → 잘못된 괄호 → Fal..

[프로그래머스] 이모티콘 할인행사 - 백트래킹 + 가지치기 풀이

🏝️ 문제 개요문제 링크: 프로그래머스 - 이모티콘 할인행사문제 요약:maps라는 문자열 2차원 배열에서 'X'가 아닌 숫자들은 음식량을 의미하며, 상하좌우로 연결된 땅 덩어리(무인도)를 찾아 음식 총합을 구한 후 오름차순으로 정렬하는 문제.❓ 문제 요약각 유저는 할인율 기준과 이모티콘 플러스 가입 기준 금액을 가짐이모티콘마다 할인율을 10%, 20%, 30%, 40% 중 하나로 정해야 함목표는:이모티콘 플러스 가입자를 최대화동일한 수일 경우, 이모티콘 판매액을 최대화🧠 접근 방법기본적으로는 할인율 조합을 모두 탐색해야 함 → 4ⁿ 조합하지만:이모티콘 수가 많아지면 조합 수가 급격히 증가itertools.product로는 모든 조합을 한 번에 생성하기 때문에 최적화 불가따라서 재귀(DFS) + 가지치..

반응형