혜랑's STORY

[BOJ_C++] 10829번 : 이진수 변환 본문

무지성 공부방/알고리즘 해결

[BOJ_C++] 10829번 : 이진수 변환

hyerang0125 2021. 7. 2. 12:28

문제

 

풀이

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <stack>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

	stack<int> stack;
	long long n;
	cin >> n;
	while (1) {
		if (n < 2) {
			stack.push(n); break;
		}
		else {
			stack.push(n % 2); n /= 2;
		}
	}
	while (1) {
		if (stack.empty()) break;
		printf("%d", stack.top());
		stack.pop();
	}

	return 0;
}
  • 이진수로 변환을 하기 위해 제일 마지막에 넣은 데이터가 처음으로 빠져나오는 스택을 사용하였다.
  • while문을 통해 만약 n이 2보다 작다면 stack에 n을 push하고 while문을 빠져나오고, 아니면 2로 나눈 나머지를 push하고 n을 2로 나눈다.
  • 출력의 경우 stack이 empty일 때 while문을 빠져나오고, 안면 stack의 가장 위 값을 출력한 뒤 pop으로 가장 위의 값을 버린다.

 

결과