백준 4779번: 칸토어 집합 python

tomkitcount·2025년 4월 27일

알고리즘

목록 보기
39/306

문제 링크 : https://www.acmicpc.net/problem/4779


문제 요약

3^N 을 정수로 받고, 이것을 '-'의 개수로 치환한뒤 전체 '-'의 개수를 3등분하여 가운데 영역을 제외, 그리고 1/3된 영역도 동일하게 반복하여 마지막 '-'가 한개 남을때까지 반복한 뒤, 그 결과를 출력하는 문제.

내 해답

import sys

N = int(sys.stdin.readline())

dash = '-' * 3**N

def pop_out_middle(dash):
    if len(dash) < 3:
        return dash

    left = dash[:len(dash)//3]
    middle = dash[len(dash)//3:2*len(dash)//3]
    right = dash[2*len(dash)//3:]

    return pop_out_middle(left) + ' '*len(middle) + pop_out_middle(right)


print(pop_out_middle(dash))

문자열로 dash를 저장해서 슬라이싱 문법을 이용하여 삼등분 한 뒤 ,
가운데는 날리고, 좌, 우 의 영역에 다시 해당 함수를 재귀적으로 호출하는 형식으로 코드를 구현했다.

1,2,3,4 를 넣었을 때 출력이 옳게 나오는 것 같은데 '틀렸습니다!' 나와서 질문을 일단 올렸다.


질문에 답변이 감사하게도 달렸다.

틀린이유는 입력조건에 위배되게 코드를 구현하여 난 것이었다.
입력 조건을 다시 확인하고, 파일 끝(EOF, End of File) 이 오면 루프가 멈추게 구현하였다.
파일 끝 명령키 => Ctrl + D (유닉스/맥) 또는 Ctrl + Z (윈도우)

수정된 내 해답

import sys

def pop_out_middle(dash):
    if len(dash) < 3:
        return dash

    left = dash[:len(dash)//3]
    middle = dash[len(dash)//3:2*len(dash)//3]
    right = dash[2*len(dash)//3:]
    
    return pop_out_middle(left) + ' ' * len(middle) + pop_out_middle(right)

for line in sys.stdin:
    N = int(line)
    dash = '-' * (3 ** N)
    print(pop_out_middle(dash))
profile
To make it count

0개의 댓글