-
[백준] 1094 - 막대기 (재귀 풀이) (python)Problem Solving/Python 2023. 7. 11. 11:25반응형
1094번: 막대기
지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대
www.acmicpc.net
포인트
문제 설명이 복잡하지만 그냥 64를 포함하여 그걸 절반으로 나눠서 나올 수 있는 수들 (64, 32, 16, 8, 4, 2, 1) 중 몇 개 수의 합으로 X를 만들 수 있는지를 묻는 문제입니다. 풀고 나서 보니 반복문을 많이 활용했던데 저같은 경우는 나누는 과정에서 재귀 함수를 활용했습니다.
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersx = int(input()) def make_stick_half(stick, target, count): # 막대의 길이가 만드려는 길이와 같은 경우 if stick == target: # 누적된 갯수 리턴하며 재귀 탈출 return count # 막대의 길이가 만드려는 길이보다 긴 경우 elif stick > target: # 그 막대는 쓸 수 없으니 절반 길이의 막대로 재귀 호출 return make_stick_half(stick // 2, target, count) # 막대의 길이가 만드려는 길이보다 짧아진 경우 else: # 그 막대는 쓸 수 있으므로 target의 길이에서 막대 길이만큼 빼주고 카운트도 올린다. 이 후엔 그 절반 길이의 막대로 확인해야하므로 반으로 나눠 재귀 출발 return make_stick_half(stick // 2, target-stick, count + 1) # 가장 긴 막대의 길이 64로 재귀 출발 answer = make_stick_half(64, x, 1) print(answer) 반응형'Problem Solving > Python' 카테고리의 다른 글
[백준] 1157 - 단어 공부 (python) (0) 2023.07.12 [백준] 1110 - 더하기 사이클 (python) (0) 2023.07.12 [백준] 1085 - 직사각형에서 탈출 (python) (0) 2023.07.11 [백준] 1076 - 저항 (python) (0) 2023.07.10 [백준] 1075 - 나누기 (python) (0) 2023.07.10