ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘...52
    일지 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

    댓글

Designed by Tistory.