백준 2089 : -2진수

혀니앤·2021년 4월 14일
0

C++ 알고리즘

목록 보기
46/118

★★★☆☆

기본 식을 도출하는 데에 시간이 오래 걸렸다.
코드를 작성하는 것은 2진수 법에 근거해서 짜다보니 오래걸리지 않았다.

<나의 풀이>

#include <iostream>
#include <stack>
using namespace std;

int main() {
	long long n;
	stack<int> arr;

	cin >> n;

	if (n == 0) {
		cout << 0 << "\n";
		return 0;
	}
	while (n != 1) {
		if (n % (-2) ==-1) { //나머지가 음수
			n = (n / (-2)) + 1;
			//cout << "n :: " << n << "\n";
			arr.push(1);
		}
		else {
			arr.push(n%(-2));
			n = (n / (-2));
			//cout << "n :: " << n << "\n";
		}
	}
	arr.push(1);

	while (!arr.empty()) {
		cout << arr.top();
		arr.pop();
	}
	cout << "\n";
	
	return 0;
}

2진수의 경우, 10진수 값을 2로 계속 나누고, 그 나머지 값을 역순으로 출력하면 되었다.
-2진수의 경우, 2진수와 동일한 방식으로 진행할 때 나머지가 -1이 되는 경우가 문제가 되었다.
따라서 나머지가 -1인 경우에는 몫에 1을 더하여 나머지를 1로 만들어준다.

10진수 값이 1이 될때까지 진행하고, 마지막 1은 직접 array에 넣어주었다. (10진수 값이 1인 경우에는 while구문 자체가 돌아가지 않으므로.)

profile
일단 시작하기

0개의 댓글

관련 채용 정보