본문 바로가기

Baekjoon

[Baekjoon]백준 4779 칸토어 집합(실버 3) - Python

문제설명

문제를 읽어보면 3^N개의 '-'로 이루어진 문자열을 계속해서 3등분한 후에 그 결과를 출력해야한다

이를 해결하기 위해선 가운데 구간을 삭제하는 함수를 재귀적으로 호출해야한다

 

대신, 호출할 지점을 잘 정해야하는데 3등분 한 후에 중간을 공백으로 바꾸기 때문에

3등분하는 변수를 하나 정한 뒤에 시작점부터 1/3지점 하나, 2/3지점부터 끝까지 하나를

함수의 인자로 넣고 return 하면 된다 그리고 중간지점은 공백으로 채워주어야한다

이 함수는 길이가 1(즉, '-'하나만 남을때까지)이 되면 return '-'을 해주면 원하는 결과를 얻을 수 있다

def erase(ls):
    if len(ls) == 1:
        return '-'
    standard = len(ls)//3
    return erase(ls[:standard]) + ' ' * standard + erase(ls[2*standard:])
    
while True:
    try:
        N = int(input())
        Cantorian = '-' * (3**N)
        print(erase(Cantorian))
    except:
        break

별도의 입력 종료 조건이 존재하지 않기 때문에 while True와 try, except문을 통하여 실행해주면 된다