이 문제의 핵심은 공백 문자를 재귀적인 리턴이 될 때마다 추가 해주면 되는 것이다.
간단하게 바로 푼다면(내가 답으로 바로 생각한 방법인) if문을 이용해서 리턴값이 None 또는 BNode 일 때마다 공백 문자를 하나씩 늘려주는 방법이다.
실제로 이렇게 풀어도 되긴 하지만 코드가 길어지고 멋이 없다는 생각이 들었다. 그래서 다르게 푸는 방법을 생각 했는데, 리턴값이 리스트였다면 공백으로 묶어주면 될 거라고 생각했지만 __repr__ 메소드는 반드시 문자열을 리턴해야 한다.
그래서 생각한 것이 문자열을 다시 분리시면 된다는 것이다.
class BNode : def __init__(self, value=None, left=None, right=None) : self.value = value self.left = left self.right = right def __repr__(self) : return '\n\t'.join(('%s (\n%s\n%s)' % (self.value, self.left, self.right)).split('\n'))딱 리턴값 한줄만 바꾸었다. 원래 리턴 결과를 split('\n') 으로 분리 한다음 그것을 '\n\t' 로 묶어버렸다.
처음에는 뒤 포맷 문자열에 대입되는 튜플들의 값을 분리하고 묶었는데, 값이 한개뿐인 리스트라도 분리하고 묶는 것이 가능했다.
그래서 None 객체를 문자열로 변환시키기 위해 str(self.value) 와 같이 사용하고, 그 문자열을 분리하고 묶었다.
그러나 위와 같이 전체 문자열을 분리하고 묶는 방법으로도 원하는 출력값을 얻어낼 수 있다.
댓글 없음:
댓글 쓰기