반응형

문제 출처 : 


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




알고리즘 분석 :


10진수를 2진수로 변환할 때는 다음과 같은 방식으로 변환을 한다.




사진을 보듯이 33을 입력 받았다면 33에서 나누기 2를하여 나머지가 1인지 0인지 판단하고, 


1이면 이진수를 만드는 배열에 1을넣고 0이면 배열에 0을넣으면서 나아가다가 마지막 배열에 강제로 1을 넣어줌으로써 해결한다.


강제로 1을 넣는다는 의미는 8 4 2 다음 1 << 이 수는 알고리즘 코드에서 나눗셈을 하지 않는다. (for문의 조건이 k != 1 이기에)


물론 1도 포함시켜도 되지만 2진수가 당연한 것이, 가장 앞자리는 1이기 때문에 (ex : 1001은 있지만, 001은 없다.) 1을 강제로 포함시켜 준다.



소스 코드 : 


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
#include <stdio.h>
 
long long int k;
 
int main()
{
    int i,n;
    int a[100];
 
    scanf("%lld"&k);
 
 
    for (i = 0; k != 1; i++)
    {
        if (k % == 0)
        {
            k = k / 2;
            a[i] = 0;
        }
 
        else if (k % == 1)
        {
            k = k / 2;
            a[i] = 1;
        }
    }
    i--;
 
    printf("1"); for (i; i >= 0; i--) { printf("%d", a[i]); }
 
    return 0;
}
 
//                                                        This source code Copyright is Crocus 
//                                             Do you want to see more contents? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[10610번] 30  (0) 2016.07.09
[1789번] 수들의 합  (0) 2016.07.09
[10942번] 팰린드롬?  (0) 2016.07.06
[11047번] 동전 0 (Greedy Algorithm)  (0) 2016.07.05
[11399번] ATM (Greedy Algorithm)  (0) 2016.07.05