[백준_Python] 4779번 칸토어 집합 [실버 3]

황준성·2025년 1월 7일
0

BOJ_Python

목록 보기
55/70

문제

문제 이해

재귀함수 문제이므로 반복문, 재귀함수 둘다로 풀 수 있다.

문제 설명의 가장 아래 값이 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
profile
Make progress

0개의 댓글