일지

알고리즘...52

niamdank 2021. 9. 10. 15:54

노드의 크기에 따른 출력 함수 제작

노드의 크기가 주어지고 데이터가 주어질 때 가운데 정렬이 된 상태의 스트링을 반환하는 함수를 만든다.

가령 노드의 크기가 5이고 노드의 값이 1이라고 하면 가운데 정렬을 위한 공백의 개수는 다음과 같다.

 

공백의 개수 = (노드의 크기 - 노드의 값의 길이) / 2

 

이때, 나눠지는 값이 홀수 인 경우 글자를 오른쪽에 치우쳐서 출력하기 위해 우측 공백을 추가로 준다고 하면, 왼쪽과 오른 른쪽 공백은 다음과 같이 구할 수 있다.

 

왼쪽 공백의 개수 = 공백의 개수

오른쪽 공백의 개수 = 공백의 개수 + (노드의 크기 - 노드의 값의 길이) % 2

 

정확한 공백을 확인하기 위해 ' ' 대신 '_'를 사용해 구현해 보면 다음과 같다.

 

BinarySearchTree.h

/// <summary>
/// 이진 검색 트리에 사용할 노드
/// </summary>
struct BinarySearchNode
{
	const static size_t Width = 5;

	// ...

	string ToString()
	{
		string dataStr = std::to_string(data);
		size_t spaceCnt = Width - dataStr.size();
		size_t leftSpaceCnt = spaceCnt / 2;
		size_t rightSpaceCnt = spaceCnt / 2 + spaceCnt % 2;

		return string(leftSpaceCnt, '_') + dataStr + string(rightSpaceCnt, '_');
	}

	// ...
};

 

main.cpp

#include "Common.h"
#include "검색트리/BinarySearchTree.h"

int main()
{
	BinarySearchNode node;
	node.data = 1;
	std::cout << node.ToString() << '\n';
	node.data = 12;
	std::cout << node.ToString() << '\n';
	node.data = 123;
	std::cout << node.ToString() << '\n';
	node.data = 1234;
	std::cout << node.ToString() << '\n';
	node.data = 12345;
	std::cout << node.ToString() << '\n';
}

 

실행결과

__1__
_12__
_123_
1234_
12345