본문 바로가기
코딩테스트

[백준 2877] C++ 4와 7

by k99812 2025. 5. 16.

문제

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;
}