안녕하세요 !
오늘은 백준 4779번 - 칸토어 집합 문제를 가져왔습니다.

문제를 해결하는 방법은 다음과 같습니다.
- 입력을 받는다.
- 3^n 개의 '-'로 구성된 문자열을 만든다.
- 칸토어 집합을 만들어주는 재귀함수에 문자열을 인수로 넘긴다.
입력을 받는다.
파일의 끝에서 입력을 끝낸다고 문제에서 설명되어있기 때문에 참일 때 while로 반복하다가 EOF (End of File)와 같은 예외가 발생하면 except의 break를 통해 빠져나올 수 있도록 했습니다.
while True: try: n = int(input()) s = make_str(n) print(cantor_set(s)) except: break
def make_str(n): s = '' for a in range(3**n): s += '-' return s
칸토어 집합을 만들어주는 재귀함수에 문자열을 인수로 넘긴다.
먼저 종료조건 2개를 만들어줍니다. 문자열이 공백일 때는 더 이상 나눌 필요가 없어서 반환해줍니다. 또한 문자열이 공백이 아닌 '-'이고 그 길이가 1일 때는 반환해줍니다.
문자열을 3등분을 해주고 2번째는 공백으로 치환해줍니다. 그 다음 나눈 문자열을 각각 호출해주고 +를 통해서 문자열이 하나로 합쳐져 반환될 수 있도록 해줬습니다.
def cantor_set(s): if s[0] == ' ': return s if s == '-' and len(s) == 1: return s step = len(s) // 3 one = s[:step] two = s[step:2*step] three = s[2*step:] two = two.replace('-', ' ') return cantor_set(one) + cantor_set(two) + cantor_set(three)
import sys
def make_str(n):
s = ''
for a in range(3**n):
s += '-'
return s
def cantor_set(s):
if s[0] == ' ':
return s
if s == '-' and len(s) == 1:
return s
step = len(s) // 3
one = s[:step]
two = s[step:2*step]
three = s[2*step:]
two = two.replace('-', ' ')
return cantor_set(one) + cantor_set(two) + cantor_set(three)
while True:
try:
n = int(input())
s = make_str(n)
print(cantor_set(s))
except:
break