본문 바로가기
알고리즘(C++)

스택 - 10진수를 2진수로 바꾸기

by 송파감자 2025. 1. 28.

1. 문제 

/*
- 문제 : Solution함수 구현하기
- 조건 : 
        1) 매개변수 : int (10진수)
        2) 반환타입 : string (2진수임)
        3) 기능 : 매개변수를 2진수로 바꾸고 그걸 string으로 반환
*/

2. 내가 푼 코드

... 45분 정도 걸림....

디버깅 개하면서 어찌저찌 해결했음...

#include <iostream>
#include <stack>
#include <string>

using namespace std;

/*
- 문제 : Solution함수 구현하기
- 조건 : 
        1) 매개변수 : int (10진수)
        2) 반환타입 : string (2진수임)
        3) 기능 : 매개변수를 2진수로 바꾸고 그걸 string으로 반환
*/
string solution(int Num)
{
    stack <int> StNam;

    int TempNum = Num;
    int Namuji;

    while (!(TempNum < 1))
    {
        if (StNam.empty())
        {
            Namuji = Num % 2;
            TempNum = Num / 2;
        }
        else
        {
            Namuji = TempNum % 2;
            TempNum = TempNum / 2;
        }
        StNam.push(Namuji);
    }

    string StringNum;
    stack <string> St;

    while (!StNam.empty())
    {
        StringNum = to_string(StNam.top());

        St.push(StringNum);
        StNam.pop();        
    }
  
    string Answer;

    while (!St.empty())
    {
        Answer += St.top();
        St.pop();
    } 

    reverse(Answer.begin(), Answer.end());
    
    return Answer;
}

int main()
{
    // 예시 코드
    cout << solution(10) << endl;       // 1010
    cout << solution(27) << endl;       // 11011 
    cout << solution(12345) << endl;    // 11000000111001 

    return 0;
}

 

3. 개선한 코드 (솔루션함수) - 스택 안 쓴 것

string solution(int num)
{
    if (num == 0) return "0"; // 0 처리

    string binary = "";

    while (num > 0)
    {
        binary = to_string(num % 2) + binary; // 현재 비트를 문자열 앞에 추가
        num /= 2; // 몫 계산
    }

    return binary;
}

4. 개선한 코드- 스택 쓴 것

string solution(int Num)
{
    if (Num == 0)
    {
        return "0";
    }

    stack <int> BiStk;
    while (Num > 0)
    {
        BiStk.push(Num%2);
        Num = Num / 2;
    }   

    string BiStr;
    while (!BiStk.empty())
    {
        BiStr += to_string(BiStk.top());
        BiStk.pop();
    }

    return BiStr;     
}

 

5. 코멘트 : 

  • 언리얼을 써서 그런지 STL Stack의 메소드가 소문자로 시작해서 넘 어색하게 느껴짐
  • 익숙해진 것 : 푸쉬, 팝 사용하기
  • 아직 어려운 것 : 조건을 어떻게 깔끔하게 적냐

'알고리즘(C++)' 카테고리의 다른 글

배열 - 두개 뽑아서 더해서 정렬하기  (0) 2025.01.30
배열 - 배열제어하기  (0) 2025.01.30
배열 - 배열정리하기  (0) 2025.01.30
큐- 요세푸스 문제  (0) 2025.01.28
스택 - 괄호 짝 맞추기  (0) 2025.01.27