본문 바로가기

개발👩‍💻/알고리즘

백준 js 2089: -2진수

728x90

문제

-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을 해준다.

 

전체코드

반응형