반응형

Programming 40

프로그래머스 불량 사용자 문제 풀이 (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..

프로그래머스 문제 해석: 피로도 최대화 (LV2 포인트 청소)

문제 링크✔️ 문제 요약하루 피로도 k각 던전: [최소 필요 피로도, 소모 피로도]하루에 최대 몇 개의 던전을 돌 수 있는가?제한: 던전 수 ≤ 8✨ 접근 방식: 순열(permutations)을 활용한 완전 탐색⚡️ 왜 permutations를 사용했을까?모든 던전 순서를 고려해봐야 하기 때문던전은 중복 없이 정해진 순서로 돌아야 하므로, 가능한 모든 순열을 탐색해야 최적의 해를 찾을 수 있음문제에서 던전 수가 8 이하로 충분히 작아 완전탐색이 가능함프로그래머스 문제 풀이 코드from itertools import permutationsdef solution(k, dungeons): max_count = 0 for order in permutations(dungeons): curr..

[프로그래머스 Lv.2] 테이블 해시 함수 풀이 전략 + XOR 초기값 & Generator Expression 팁

문제 링크: 프로그래머스 147354 - 테이블 해시 함수📘 문제 설명 요약2차원 테이블이 주어졌을 때, 특정 정렬 기준과 해시 계산 방식을 이용해 특정 범위의 행에 대해 해시 값을 구하고, 이를 XOR 연산으로 누적한 값을 반환하는 문제입니다.✅ 문제 풀이 요약📌 요구사항 요약col번째 컬럼 기준 오름차순 정렬같다면 첫 번째 컬럼 기준 내림차순 정렬row_begin부터 row_end까지 각 행에 대해i번째 행이라면: 각 원소를 i로 나눈 나머지의 합을 구함이 합들을 모두 XOR해서 반환🧠 코드 풀이def solution(data, col, row_begin, row_end): # 1. 정렬 sorted_data = sorted(data, key=lambda x: (x[col - 1], ..

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

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

Flipper: Ruby on Rails에서 Feature Flag를 효율적으로 관리하는 방법

Flipper는 Ruby on Rails 환경에서 널리 사용되는 feature flag 관리 라이브러리입니다.배포와 실험을 안전하게 제어할 수 있도록 도와주는 도구로, 실무에서 점진적 기능 공개, AB 테스트, 롤백 대응 등에 유용하게 활용됩니다.🧩 Flipper란?Flipper는 다음과 같은 목적을 위해 사용됩니다:기능을 코드 수준이 아닌 설정 기반으로 제어유저 그룹 또는 비율 기반 점진적 공개빠른 기능 롤백 및 안전한 실험 환경 구성🚀 주요 기능기능설명기능 on/off실시간으로 특정 기능을 토글유저 단위 공개특정 유저에게만 기능 노출비율 릴리즈전체 중 일부 유저(10%, 50%)에게만 공개환경 조건 분기production과 staging 등에서 다르게 설정Admin UI웹 UI로 플래그를 관리할 ..

fetch join은 페이징 불가? (관계에 따른 진실과 Querydsl의 대응 전략)

이 글은 JPA N+1 문제 해결 전략에서 이어지는 글입니다.먼저 N+1 문제의 배경과 해결 방법을 알고 싶다면 이전 글을 참고해주세요! JPA를 쓰다 보면 fetch join은 성능 최적화의 필수 도구처럼 느껴지지만,페이징과 함께 쓰려 할 때는 자주 “불가능하다”는 이야기를 듣게 됩니다.이 글에서는 fetch join과 페이징이 충돌하는 근본적인 이유,그리고 Querydsl에서는 어떻게 다르게 동작하는지, 관계에 따라 어떤 문제가 발생할 수 있는지를 정리해보았습니다.1. fetch join이란?JPA의 fetch = FetchType.LAZY 설정은 연관 엔티티를 실제로 사용할 때 쿼리를 발생시킵니다.이를 해결하기 위한 대표적인 방법이 JPQL의 JOIN FETCH입니다.@Query("SELECT m ..

Programming/Spring 2025.07.15

JPA N+1 문제 정복하기: fetch join부터 batch size까지 실전 해결 전략

JPA를 쓰다 보면 한 번쯤 겪게 되는 대표적인 성능 이슈, 바로 N+1 문제입니다.이 글에서는 N+1 문제가 어떻게 발생하는지, 그리고 실제로 어떻게 해결할 수 있는지 정리해보았습니다.1. N+1 문제란?JPA에서는 연관 관계가 기본적으로 LAZY 로딩입니다.@ManyToOne(fetch = FetchType.LAZY)private Team team;이 설정으로 인해, 연관된 엔티티는 실제로 접근하는 시점에 쿼리가 발생합니다.예시:List members = memberRepository.findAll();for (Member m : members) { System.out.println(m.getTeam().getName()); // N개의 쿼리 발생!}Member 전체를 가져오는 쿼리 1번각 Me..

Programming/Spring 2025.07.15

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

Spring DI란? 주입 방식의 종류와 기본 개념

Spring에서 가장 중요한 개념 중 하나인 DI(Dependency Injection, 의존성 주입)은 객체 간의 의존 관계를 외부에서 주입해주는 방식입니다. 이 글에서는 DI가 무엇인지, 그리고 어떤 방식으로 의존성을 주입할 수 있는지 정리해보겠습니다.✅ 의존성 주입(DI)이란?객체 간의 협업이 필요할 때, 직접 객체를 생성하지 않고 외부에서 주입받는 방식입니다.Spring에서는 DI를 통해 객체 간 결합도를 낮추고, 테스트 및 유지보수를 용이하게 만듭니다.예: UserService가 UserRepository를 필요로 할 때 직접 생성하지 않고 외부에서 주입받음💡 DI 방식의 종류Spring에서는 의존성 주입을 다음과 같은 방식으로 지원합니다:1. 필드 주입 (Field Injection)@Com..

Programming/Spring 2025.07.14
반응형