본문 바로가기
백준

[백준/C++] 1094 막대기

by MY블로그 2023. 4. 10.

https://www.acmicpc.net/problem/1094

 

1094번: 막대기

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대

www.acmicpc.net

처음 64cm 라는 길이의 막대기를 가지고

원하는 xcm 의 막대기를 만들기위해 처음가진 막대기르 반으로 나누고

나누었을때 x크기보다 크면 다시나누고 작으면 나눈 다른한쪽을 나눠 붙여 가며 x의 수를 만드는 데 몇번 붙였는지를 구하는 문제.

 

나중에 찾아보니 이진법의 규칙을 활용한 문제라고한다..

 

풀이

// 백준 막대기 문제 풀이
#include <iostream>
#define fastio cin.tie(0)->ios::sync_with_stdio(0); cout.tie(0);
using namespace std;

int main()
{
	fastio;
    int x;
    cin >> x;
    int length = 64, sum = 0, count = 0;
    while (sum != x)  // 합친막대와 원하는길이X 가같지않다면반복
    {
        if (length + sum > x) // 원하는길이보다 크다면 길이를나눠주고
        {
            length /= 2;
        }
        else // 원하는길이보다작다면 합계에더하고 다시길이를 반으로쪼갠다
        {
            sum += length;
            length /= 2;
            count++; // 붙이는 카운트 증가
        }
    }
    cout << count;
    return 0;
}

 

 

 

'백준' 카테고리의 다른 글

[백준/C++] 10845 큐  (0) 2023.05.03
[백준/C++] 2485 가로수 (유클리드호제법, 최대공약수)  (0) 2023.05.02
[백준/C++] 1914 하노이 탑  (0) 2023.04.25
[백준/C++] 1181 단어 정렬  (0) 2023.04.11
[백준/C++] 1010 다리놓기  (0) 2023.04.07

댓글