프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 테두리의 갈색 격자와 내부의 노란색 격자 수를 바탕으로 전체 카펫의 가로, 세로 길이를 찾는 문제입니다. 격자 구조의 기하학적 특징을 수식으로 도출하여 가능한 경우의 수를 탐색하는 완전 탐색 문제로 분류됩니다.1. 나의 풀이def solution(brown, yellow): # 노란색 격자의 가로와 세로 합 도출 # 갈색에서 4개의 귀퉁이를 제외한 노란색의 둘레를 2개로 나눠 구함 yellow_col_plus_row = (brown - 4) // 2 yellow_row = 0 while True: yellow_row += 1..
프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 수포자 삼인방이 각자의 고유한 규칙으로 정답을 찍을 때, 주어진 정답 배열과 비교하여 가장 많은 문제를 맞힌 사람을 찾는 문제입니다. 정답의 규칙이 없으므로 모든 수포자의 패턴을 전수 조사하는 완전 탐색 방식을 사용합니다.1. 나의 풀이def solution(answers): # 수포자들의 찍기 패턴 정의 p1 = [1, 2, 3, 4, 5] p2 = [2, 1, 2, 3, 2, 4, 2, 5] p3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] users = [p1, p2, p3] right_answer_cnt..
프로그래머스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 ..