Problem Solving/Python
[백준] 1094 - 막대기 (재귀 풀이) (python)
TakeKnowledge
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 characters
x = 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) |
반응형