문제
-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 11011, 11000, 11001 등이다.
10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.
입력
첫 줄에 10진법으로 표현된 수 N이 주어진다.
출력
-2진법 수를 출력한다.
제한
- -2,000,000,000 ≤ N ≤ 2,000,000,000
풀이
-2진수는 결국, -2를 자릿 수 대로 나누는데, 이는 -2를 자릿수만큼 제곱해주는 것과 같다.
(-2)^n(=자릿수)
13이라고 할 때 -2진수 표현은 11101인데
계산해보면
(-2)^4 + (-2)^3 + (-2)^2 + (-2) ^0
= 16 + (-8) + (4) + 1 = 13
한번 -2 를 나눴을 때 나머지가 있으면 마지막 자릿수 1이 있어야하니까 나머지만큼을 더해준다.
그다음 -2를 나누면 -2^2과 같다. 4만큼 나눴는데 1이 남는다면 -2가 필요하다는 의미이므로 자릿수에 +1을 해준다.
반대로 말하면 나누어 떨어진다면 해당자리 다음 자리에 1이 오고 현 자리는 0이 와야하는 것을 이야기한다.
그렇게 각 자리를 채우는데,
주어진 값을 자릿수만큼 뺀 걸 빼주어야하는데, 당연히 현재 자릿수 이후에 얼만큼 남았는지를 나타내야 함으로
n / -2를 해준다.
그리고 이 값을 js는 소숫점 값으로 변환할 수 있으니 Math.ceil을 해준다.
전체코드
'개발👩💻 > 알고리즘' 카테고리의 다른 글
백준 js 11653: 소인수분해 (0) | 2021.06.27 |
---|---|
백준 js 17103: 골드바흐의 파티션 (0) | 2021.06.27 |
백준 js 1212: 8진수 2진수 (0) | 2021.05.08 |
백준 js 1373: 2진수 8진수 (0) | 2021.05.08 |
백준 js 17087: 숨바꼭질 6 (0) | 2021.05.07 |