본문 바로가기
Develop/백준 (Cpp)

[백준] 28239번 : 배고파(Easy) (C++)

by Tarra 2023. 8. 1.

28239번 : 배고파(Easy)


문제)

이 문제는 배고파(Hard)의 하위 문제이고, 배고파(Hard)의 정답 코드를 제출하여 맞힐 수 있다.

 

송도고등학교는 경관이 참 예쁘다. 도훈이는 특히 학교 뒤쪽에 만개한 벚꽃을 보고 감탄하였다.

 

2021년 봄에 찍은 송도고등학교 뒤쪽 벚꽃 나무들의 풍경이다.

 

남고에서 만개한 벚꽃을 보고 있자니 괜스레 속이 쓰린 도훈이는 밥이나 먹어야겠다고 생각했다.

 

그런데 도훈이에게는 치료가 필요할 정도로 심각한 결정 장애가 있어서 메뉴를 고르는 것이 쉽지 않다.

 

따라서 도훈이는 n개의 메뉴를 각각 다음과 같은 규칙으로 골라 먹을 생각이다.

 

주어진 양의 정수 m에 대해 2^x + 2^y = m인 음이 아닌 정수 x와 y를 찾은 뒤 메뉴판의 (x,y) 위치에 적힌 메뉴를 고른다.

 

단, x <= y인 경우만 다룬다. 하지만 도훈이는 n과 m이 너무 커서 메뉴를 주문하는 데 어려움을 겪고 있다.

 

도훈이를 도와 n개의 메뉴를 주문하는 프로그램을 작성하여라.

 

 

 

입력 :

첫 번째 줄에 메뉴의 수 이 주어진다.

이어서 개의 각 줄에 메뉴를 고를 때 사용할 양의 정수 이 하나씩 주어진다.

 

 

 

출력 :

n개의 줄에 각각 주문할 메뉴의 위치 (x,y)의 x, y를 공백으로 구분하여 출력한다.

 

 

 

 

 

풀이)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <bitset>
 
using namespace std;
 
int n;
long long m;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
 
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cin >> m;
 
        bitset<60> temp = m;
 
        // 1이 1개만 있는 경우
        // 해당 비트보다 작은 비트를 2개 출력하면 된다
        // 예를 들어 4는  1 1 로 표현이 가능하다.
        if (temp.count() == 1)
        {
            for (int j = 0; j < 60; j++)
            {
                if (temp.test(j))
                {
                    cout << j - 1 << " " << j - 1;
                    break;
                }
            }
        }
        else
        {
            for (int j = 0; j < 60; j++)
            {
                if (temp.test(j))
                {
                    cout << j << " ";
                }
            }
        }
        cout << '\n';
    }
 
 
    return 0;
}
cs

출처 : https://www.acmicpc.net/problem/28239 

 

28239번: 배고파(Easy)

$n$개의 줄에 각각 주문할 메뉴의 위치 $(x,y)$의 $x$, $y$를 공백으로 구분하여 출력한다.

www.acmicpc.net