출처 : https://www.acmicpc.net/problem/1094
알고리즘 분류
- 수학
- 시뮬레이션
- X가 주어졌을 때, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 있는가?
- 막대의 처음 길이는 64cm.
- X는 64보다 작거나 같은 자연수이다.
In [3]:
def stick(x):
num = 1 ## 이어 붙일 막대기 수
total_stick = 64 ## 남아있는 막대기 총 길이
min_stick = 64 ## 가장 짧은 막대기
while(total_stick != x):
min_stick = min_stick/2
## 가장 짧은 막대를 절반으로 자르고, 절반 중 하나를 제외했을 때
## (막대기 전체 총 길이 > x) 라면, 절반 중 하나를 버린다.
if total_stick - min_stick > x:
total_stick = total_stick - min_stick
elif total_stick - min_stick < x:
num = num + 1 ## 막대기 수가 늘어난다.
else:
return num
return num
In [6]:
print("stick(23) : ", stick(23))
print("stick(32) : ", stick(32))
print("stick(64) : ", stick(64))
print("stick(48) : ", stick(48))
'알고리즘 > [Python] 백준' 카테고리의 다른 글
(Python) 백준 1018번 : 체스판 다시 칠하기 (0) | 2020.02.04 |
---|---|
(Python) 백준 2178번 : 미로 탐색 (0) | 2020.02.02 |
(Python) 백준 2455번 : 지능형 기차 (0) | 2020.01.15 |
(Python) 백준 17779번 : 게리맨더링2 (0) | 2020.01.09 |
(Python) 백준 14503번 : 로봇 청소기 (0) | 2019.12.31 |