문제
https://www.acmicpc.net/problem/2877
풀이
while (n > 0)
{
if (n % 2 == 0)
{
ret += "7";
}
else
{
ret += "4";
}
n = (n - 1) / 2;
}
- n을 % 2를 해 홀수면 4, 짝수면 7을 추가한다 그러면 해당 코드는 아래 그림처럼 동작한다
- n = (n - 1) / 2
부모노드의 번호를 구하여 부모노드로 이동한다 - ex) n = 4 이면 str에 7, 4 순으로 들어가게된다
그 이유는 부모 노드부터가 아니라 역순으로 자식에서 부모순으로 탐색한다
그래서 reverse를 해줘야 된다
전체 코드
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int n;
int main()
{
cin >> n;
string ret;
while (n > 0)
{
if (n % 2 == 0)
{
ret += "7";
}
else
{
ret += "4";
}
n = (n - 1) / 2;
}
reverse(ret.begin(), ret.end());
cout << ret << "\n";
return 0;
}