#include <iostream> using namespace std; int main() { int goal; cin >> goal; int t_length=64; int sht=64; int cnt=1; while(t_length>goal) { sht/=2; cnt++; if(t_length-sht>=goal) {t_length-=sht;cnt--;} } cout << cnt; } |
문제는 아직 이해 못함 그냥 주어진 조건대로 코딩.
- 지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이 때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다. -> while(t_length>goal)
- 가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다. ->sht/=2; 개수는 1개가 2개가 되니 cnt++;
- 만약, 위에서 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 X보다 크거나 같다면 ->if(t_length-sht>=goal)
, 위에서 자른 막대의 절반 중 하나를 버린다. -> t_length-=sht; 하나 버렸으니까 cnt--;
- 이제, 남아있는 모든 막대를 풀로 붙여서 Xcm를 만든다.
-> cnt 출력
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
171027_간단한 압출 풀기 (0) | 2017.10.27 |
---|---|
171026_FESTIVAL_록 페스티벌 (0) | 2017.10.26 |
171026_2455_지능형 기차 (0) | 2017.10.26 |
171025_2096_내려가기 (0) | 2017.10.25 |
171024_최빈수구하기 (0) | 2017.10.24 |