반응형

Programming 38

[프로그래머스 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부모에게 넘길 ..

Brakeman 오탐(False Positive) 현명하게 관리하기

Brakeman 시리즈 마지막 편입니다.우리는 1편에서 Brakeman의 기본 사용법을 익혔고, 2편에서는 CI에 연동하여 보안 스캔을 자동화했습니다.이번 글에서는 자동화된 스캔 결과를 어떻게 깔끔하고 신뢰도 높게 유지하는지, 즉 '오탐'을 관리하는 실용적인 방법을 알아봅니다. Brakeman으로 프로젝트를 스캔하다 보면, 수많은 경고 목록에 압도될 때가 있습니다. 하지만 이 경고들이 모두 실제 위협은 아닐 수 있습니다. Brakeman이 보안상 위험하다고 판단했지만, 코드의 전체적인 맥락이나 숨은 로직 때문에 실제로는 안전한 경우, 이를 오탐(False Positive)이라고 부릅니다.오탐을 그대로 방치하면 어떻게 될까요? 개발자들은 점차 모든 경고를 무시하게 되고(양치기 소년 효과), 결국 진짜 중요..

CircleCI/GitHub Actions에 Brakeman 자동화 연동하기

Brakeman 시리즈 2편입니다.이전 글에서는 Brakeman의 기본 개념과 설치, 그리고 첫 스캔을 실행하는 방법을 알아보았습니다. 아직 Brakeman이 생소하시다면 아래 글을 먼저 읽고 오시는 것을 추천합니다.◀ 이전 글 다시보기: 내 Rails 앱의 첫 번째 보안관, Brakeman 시작하기 Brakeman을 로컬 환경에서 실행하는 것에 익숙해졌다면, 다음 단계는 이 과정을 자동화하여 모든 코드 변경사항에 대해 보안 검사를 실행하는 것입니다. 개발 파이프라인에 보안 스캔을 통합하는 것을 'DevSecOps'의 첫걸음이라고 부르기도 합니다.이번 글에서는 대표적인 CI/CD 도구인 CircleCI와 GitHub Actions에 Brakeman을 연동하여, 커밋하거나 풀 리퀘스트를 생성할 때마다 자동..

내 Rails 앱의 첫 번째 보안관, Brakeman 시작하기

Ruby on Rails로 애플리케이션을 개발하다 보면, 우리는 자연스럽게 기능 구현에 집중하게 됩니다. 하지만 우리가 작성하는 코드 한 줄 한 줄에 보안 취약점이 숨어있을 수 있다는 사실을 알고 계셨나요? 마치 정기적으로 건강검진을 받아 우리 몸의 이상 신호를 확인하는 것처럼, 우리 코드도 정기적인 보안 검진이 필요합니다.오늘 소개할 Brakeman은 바로 Rails 앱을 위한 '코드 건강검진 도구'입니다. 복잡한 설정 없이도 우리 앱의 보안 상태를 진단하고 잠재적인 위험을 알려주는 든든한 첫 번째 보안관 역할을 해줍니다.🤔 Brakeman, 왜 사용해야 할까요?수많은 보안 도구 중에서 Brakeman이 Rails 개발자에게 특히 사랑받는 이유는 명확합니다.오직 Rails를 위한 전문성: Brakem..

올바른 괄호의 갯수 (예제 코드와 시행착오)

프로그래머스 문제 링크문제 설명길이가 2n인 괄호 문자열 중에서 올바른 괄호 문자열의 개수를 구하는 문제입니다. 올바른 괄호란, 열리는 괄호 (가 닫히는 괄호 )보다 먼저 나오고, 모든 괄호가 짝을 이루는 형태를 말합니다.첫 시도: 문자열 기반의 DFS 구현def solution(n): answer = 0 str_list = "()" stack = [(1, "(", 1, 0)] while stack: depth, current_str, open_count, close_count = stack.pop() if depth == n * 2: if current_str == "": answer += 1 ..

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

문제 링크 → 프로그래머스 - 거리두기 확인하기문제는 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..

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

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

반응형