프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr방 개수가 최대 $ 10^{12} $개에 달하는 상황에서 고객의 요구에 따라 빈 방을 효율적으로 찾아 배정하는 문제입니다. 대규모 데이터셋을 처리하기 위한 자료구조 선택과 탐색 시간을 단축하는 경로 압축(Path Compression) 기법이 핵심입니다.1. 나의 풀이배정된 방의 정보를 동적으로 관리하기 위해 딕셔너리를 사용했습니다. 재귀 호출을 통해 빈 방을 찾고, 돌아오는 과정에서 거쳐온 모든 방의 이정표를 갱신하여 탐색 효율을 극대화했습니다.import sys# 재귀 한계를 충분히 늘려 런타임 에러를 방지합니다.sys.setrecursionlimit(10 **..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는 길이 5 이하의 모든 단어가 수록된 사전에서, 특정 단어가 몇 번째 위치에 있는지 찾는 문제입니다. 재귀를 통한 완전 탐색 방식과 수학적 규칙을 활용한 계산 방식 두 가지로 접근할 수 있습니다.1. 나의 풀이사전의 모든 단어를 생성할 때, '현재 단어에서 다음 단어를 계산'하는 방식 대신 '빈 문자열에서 시작하여 모음을 순서대로 붙여나가는' 깊이 우선 탐색(DFS) 방식을 사용했습니다. 이는 사전의 순서를 자동으로 보장하며 로직을 단순화합니다.def find(data, p, step..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr세 개의 기둥을 이용하여 원판을 조건에 맞게 목적지로 옮기는 퍼즐 문제입니다. 큰 문제를 작은 단위의 덩어리로 쪼개어 해결하는 재귀적 사고방식을 익히기에 가장 적합한 알고리즘입니다.1. 나의 풀이하노이의 탑 규칙인 '작은 원판 위에 큰 원판이 올 수 없다'는 제약을 지키며 전체 원판을 옮기기 위해, 가장 큰 원판을 제외한 나머지 원판들을 하나의 '덩어리'로 취급하여 이동시키는 재귀 로직을 사용했습니다.def hanoi(n, start, to, mid, answer): # 옮겨야 할 원판이 1개인 경우 바로 목적지로 이동 if n == 1: a..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 주어진 수가 1이 될 때까지 특정 연산을 반복하며 그 횟수를 구하는 문제입니다. 이 과정에서 재귀 함수(Recursion)의 기초 설계 방법인 상태 정의, 종료 조건 설정, 그리고 점화식 수립의 원리를 학습할 수 있습니다.1. 나의 풀이def collatz(n, cnt): # [종료 조건 1] 작업을 500번 반복할 때까지 1이 되지 않는다면 -1을 반환 if cnt == 500: return -1 # [종료 조건 2] 주어진 수가 1인 경우 현재까지의 반복 횟수를 반환 if n == 1: return cnt ..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 조카가 발음할 수 있는 네 가지 단어의 조합으로 이루어진 문자열을 찾는 문제입니다. 단, 동일한 발음이 연속으로 나오는 경우는 발음할 수 없다는 제약 조건을 정규표현식으로 정밀하게 필터링하는 것이 핵심입니다.1. 나의 풀이허용된 단어들로만 구성되었는지 확인하는 패턴과 연속된 발음을 찾아내는 패턴을 분리하여 구현했습니다. import redef solution(babbling): answer = 0 # 조카가 발음할 수 있는 단어들이 1번 이상 반복되는지 확인하는 패턴 pattern1 = re.compile(r"(aya|ye|woo|ma)+") ..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 다트 게임의 점수 계산 로직을 구현하는 문제로, 문자열에 섞여 있는 점수, 보너스, 옵션을 정확히 분리하여 3번의 기회에 대한 점수를 합산해야 합니다. 정규표현식을 활용한 패턴 추출과 리스트 슬라이싱을 이용한 조건부 점수 처리가 핵심입니다.1. 나의 풀이정규표현식의 그룹 캡처 기능을 사용하여 데이터를 분리하고, 리스트 슬라이싱을 활용해 스타상(*)의 예외 처리를 간결하게 구현했습니다. import redef solution(dartResult): # 점수(\d+), 보너스([SDT]), 옵션([*#]?)을 각각 그룹으로 묶어 추출합니다. # 옵션 뒤의 ..