BOJ : https://www.acmicpc.net/problem/2089

GitHub : https://github.com/junho0956/Algorithm/blob/master/2089/2089/%EC%86%8C%EC%8A%A4.cpp

 

-2진수에 대한 변환법은 2진수 변환법과 똑같다

다른 부분은 나눗셈을 할 때 몫과 나머지를 잘 건드려줘야되는 것

13을 2로 나누면 몫은 6, 나머지는 1이다.

하지만 -13 을 2로 나누면 몫을 -6, 나머지는 -1이 되는데

이 문제를 풀기 위해서는 -13 -> -7, 1 을 만들어야하는 과정을 이해해야한다.

 

다른분들 블로그를 읽어봤는데 개념을 제대로 파악하지 않고 외우기식 문제풀이만 하는 분들이 많았다.

그렇게하면 문제를 안푼거랑 똑같지않나 라는 생각이 든다.

 

2진수라는 것은 1과 0으로만 표현할 수 있다. -1은 표현이 안되는 수이다

이 개념을 이용해보자면 ==> -1을 1로 만들수 없을까? 가 되고

-1을 1로 만들려면 몫을 -1 만큼 더 주는 대신 나머지는 2를 더해주는 것이다.

===> -13 을 2로 나누면 몫은 -7, 나머지는 1 이 된다.

이 방법을 이용하면 나머지가 1,0으로만 떨어지면서 2진수로 표현이 가능해진다.

 

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
#include <cstdio>
#include <stack>
using namespace std;
#pragma warning(disable:4996)
stack<int> s;
int main() {
    int N;
    scanf("%d"&N);
    if (!N) s.push(0);
    while (N) {
        if (N > 0) {
            s.push(N % 2);
            N = N / 2 * -1;
        }
        else {
            if ((N * -1) % 2 == 0) {
                s.push(0);
                N = N * -1 / 2;
            }
            else {
                s.push(1);
                N = ((N * -1+ 1/ 2;
            }
        }
    }
    while (!s.empty()) printf("%d", s.top()), s.pop();
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

'algorithm > BOJ' 카테고리의 다른 글

BOJ 1929번 소수 구하기  (0) 2020.01.13
BOJ 1978번 소수 찾기  (0) 2020.01.13
BOJ 1212번 8진수 2진수  (0) 2020.01.13
BOJ 1373번 2진수 8진수  (0) 2020.01.13
BOJ 2745번 진법 변환  (0) 2020.01.13

+ Recent posts