본문 바로가기

백준

2877 4와 7

와씨 와 

 

이 문제 이진수..? 느낌이 들긴 했는데 정말 이진수로 풀리는 문제였다.

 

대박 내가 이걸 생각해내다니 대-다-내

 

 

 

생각한 방식은 이렇다..

 

예를들어 17이면 0001인데 이걸 0을 4로 1을 7로 바꾸면 답이 된다. 

 

문제는 1도 아니고 01도 아닌 0001 4자리를 맞춰야 하는 건데 이건 따로 2의 거듭제곱을 저장하는 배열을 만들어서 구현했다. 

 

16이면 2^4라 4자리이고 17에서 16을 빼면 1이 나오므로 이 1을 4자리 이진수로 표현하면 된다. 

 

구현은 비트마스크를 사용했다!

 

비트마스크 은근히 잘 쓰고 있는데 넘 편하다 진짜... 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

using namespace std;

int     main()
{
    i64 n;
    scanf("%lld", &n);

    vector<int> v(31);
    for (int i = 0; i < 31; i++)
        v[i] = (1 << i);

    n++;

    int len = 1;
    i64 two = 2;
    for (int i = 0; i < 31; i++)
    {
        if (n < v[i])
        {
            len = i - 1;
            two = v[i - 1];
            break;
        }
    }

    bitset<31> bt(n - two);

    for (int i = len - 1; i >= 0; i--)
    {
        if (bt[i] == 1)
            printf("7");
        else
            printf("4");
    }

    return 0;
}

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

18406 럭키 스트레이트  (0) 2020.10.06
2138 전구와 스위치  (0) 2020.10.06
8979 올림픽  (0) 2020.10.06
11656 접미사 배열  (0) 2020.10.06
14624 전북대학교  (0) 2020.10.06