728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에 K(1<=K<=10^9)가 주어진다.
출력
첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다.
소스코드
#include <iostream> #include <vector> #include <math.h> using namespace std; int main(void) { int n, sum = 0, k, idx, i, size; cin >> n; for (k = 1; k <= 32; k++) { sum += pow(2, k); if (sum >= n) break; } idx = n - pow(2, k) + 1; vector<int> arr(k, 0); i = 0, size = arr.size(); while (idx>0) { arr[size - 1 - i] = idx % 2; idx /= 2, i++; } for (int i = 0; i < size; i++) { if (arr[i] == 1) cout << 7; else cout << 4; } }
Tip
4와 7을 이진수의 0과 1로 생각하고 문제를 접근하면 어렵지 않게 풀어낼 수 있다. 소스가 지저분하긴 하지만, N번째 숫자의 자릿수가 얼마나 될지 계산하는 게 가장 중요하다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2947 - 나무 조각(COCI 2008/2009) (0) | 2018.05.28 |
---|---|
백준] 3023 - 마술사 이민혁(COCI 2006/2007) (0) | 2018.05.27 |
백준] 2504 - 괄호의 값(KOI 2008 지역본선) (0) | 2018.05.24 |
백준] 14954 - Happy Number (0) | 2018.05.21 |
백준] 11049 - 행렬 곱셈 순서 (0) | 2018.05.13 |