반응형

자료구조 6

[프로그래머스 77486] 다단계 칫솔 판매 – 파이썬 최적화 풀이

dict 대신 list, // 대신 math.ceil 최적화까지 한 번에 살펴보기문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/77486문제 요약다단계 MLM 구조에서 판매 수익이 상위 추천인에게 10 % (내림) 씩 전파된다.모든 판매 내역이 주어졌을 때, 각 사람의 최종 이익을 계산하라.enroll: 가입자 이름 목록referral: 각 가입자의 추천인(센터는 '-')seller, amount: 판매자와 판매 수량 (칫솔 1개 = 100원)기본 아이디어이름 → 인덱스 매핑으로 배열 접근.부모(추천인) 테이블을 만들어 위로 전파.판매 금액을 while 루프로 올려 보내며본인이 가져갈 돈 = money - commission부모에게 넘길 ..

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

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

문제 링크 → 프로그래머스✅ 문제 개요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() 해서..

Python 힙(heapq)으로 푸는 프로그래머스 '명예의 전당 (1)' 문제 풀이

문제 링크Python의 heapq 라이브러리를 활용해 프로그래머스의 "명예의 전당 (1)" 문제를 효율적으로 푸는 방법과, heapreplace(), heap[0] 등 힙 관련 주요 함수에 대해 설명합니다.🧩 문제 요약하루마다 가수들의 점수가 주어짐 → score 리스트매일 "명예의 전당"에는 최근 k일 간의 상위 점수가 올라감이 중 가장 낮은 점수를 매일 하나씩 리턴하는 문제❗️ 핵심 조건매일 하나의 점수만 추가됨명예의 전당에는 최대 k개 점수만 유지가장 낮은 점수를 answer 리스트에 append✅ 효율적인 접근 전략점수를 담을 최소 힙(min-heap) 을 유지힙 크기가 k를 초과하면 가장 낮은 점수를 제거매일 heap[0]으로 최솟값을 O(1)로 확인✅ 최종 코드import heapqdef s..

프로그래머스 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..

반응형