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 |