[python] 백준 4779번

도덩이의 개발 일지·2025년 7월 8일

백준

목록 보기
126/131

안녕하세요 !

오늘은 백준 4779번 - 칸토어 집합 문제를 가져왔습니다.


문제 설명


해결 방법

문제를 해결하는 방법은 다음과 같습니다.

  1. 입력을 받는다.
  2. 3^n 개의 '-'로 구성된 문자열을 만든다.
  3. 칸토어 집합을 만들어주는 재귀함수에 문자열을 인수로 넘긴다.

  1. 입력을 받는다.

    파일의 끝에서 입력을 끝낸다고 문제에서 설명되어있기 때문에 참일 때 while로 반복하다가 EOF (End of File)와 같은 예외가 발생하면 except의 break를 통해 빠져나올 수 있도록 했습니다.

while True:
    try:
        n = int(input())
        s = make_str(n)
        print(cantor_set(s))
    except:
        break

  1. 3^n 개의 '-'로 구성된 문자열을 만든다.
def make_str(n):
    s = ''
    for a in range(3**n):
        s += '-'
    return s

  1. 칸토어 집합을 만들어주는 재귀함수에 문자열을 인수로 넘긴다.

    먼저 종료조건 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
profile
말하는 감자에서 개발자로 ( ´͈ ᵕ `͈ )◞♡

0개의 댓글