일지
알고리즘...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