재귀함수 문제이므로 반복문, 재귀함수 둘다로 풀 수 있다.
문제 설명의 가장 아래 값이 N에 따라서 가져야하는 칸토어 집합 출력 값이다. 즉, N=3일때 아래의 값이 출력되면 된다.
- - - - - - - -
칸토어 집합의 결과값은 아래와 같은 일정한 규칙을 가진다.
N이 1이상일때
F(N) = F(N-1) + (" " * (3 ** (i-1))) + F(N-1)
이러한 식을 만족하기 때문에 재귀함수로 구현이 가능하다. N이 1이상이어야 하니까 N이 0일때를 Basecase로 만들면 된다.
이 문제는 값이 안들어올때까지 받아야한다. 다른 문제처럼 값의 범위를 넘으면 끝내는 방식이 아니다. 뭐든 들어오는 값은 받아야 한다. 이러면 예외 처리를 해줘야 하는데 그게 바로 try-except구문이다. try아래의 코드를 실행하는데 이를 실행해서 오류가 나면 except구문을 실행한다.
아래의 링크를 참고
https://blockdmask.tistory.com/537
# 백준 4779번 칸토어 집합
# 반복문 사용 코드
array = ["" for _ in range(13)]
array[0] = "-"
for i in range(1, 13):
array[i] = array[i-1] + (" " * (3 ** (i-1))) + array[i-1]
while True:
try: # try-except 구문 - 예외처리시 사용용
N = int(input())
print(array[N])
except: # 더 받을 값이 없으면 탈출
break
# 백준 4779번 칸토어 집합
# 재귀함수 사용 코드
def function(N):
if N == 0:
return "-"
return function(N-1) + (" " * ( 3 ** (N-1))) + function(N-1)
while True:
try:
N = int(input())
print(function(N))
except:
break