프로그래머스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]), 옵션([*#]?)을 각각 그룹으로 묶어 추출합니다. # 옵션 뒤의 ..
코딩테스트 연습 - [3차] 파일명 정렬알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려school.programmers.co.kr파일명 리스트를 HEAD, NUMBER, TAIL 세 부분으로 분리하고, 대소문자를 구분하지 않는 문자열 정렬과 숫자 크기 정렬을 조합하여 수행하는 문제입니다. 정규표현식의 그룹 캡처 기능을 활용하면 복잡한 분기문 없이도 데이터를 정밀하게 분리할 수 있습니다.1. 나의 풀이정규표현식을 미리 컴파일하여 성능을 최적화하고, re.match를 통해 문자열의 시작부터 패턴을 분석하여 데이터를 추출했습니다.import redef solution(f..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 별표(*)로 마스킹하는 문제입니다. 문자열 슬라이싱을 이용한 기본적인 풀이와 정규표현식의 전방 탐색을 활용한 심화 풀이를 정리했습니다.1. 나의 풀이def solution(phone_number): # 전체 길이에서 4를 뺀 만큼 *을 생성하고 뒷 4자리 슬라이싱 결과와 합칩니다. return '*' * (len(phone_number) - 4) + phone_number[-4:]2. 오늘 배운 점 및 복기 노트긍정형 전방 탐색(Positive Lookahead)의 활용정규표현식에서 (?=X) 형태의 전..