https://www.acmicpc.net/problem/4779
문제
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다.
전체 집합이 유한이라고 가정하고, 다음과 같은 과정을 통해서 칸토어 집합의 근사를 만들어보자.
1. -가 3N개 있는 문자열에서 시작한다.
2. 문자열을 3등분 한 뒤, 가운데 문자열을 공백으로 바꾼다. 이렇게 하면, 선(문자열) 2개가 남는다.
3. 이제 각 선(문자열)을 3등분 하고, 가운데 문자열을 공백으로 바꾼다. 이 과정은 모든 선의 길이가 1일때 까지 계속 한다.
예를 들어, N=3인 경우, 길이가 27인 문자열로 시작한다.
내 코드
import sys
from collections import deque
#input = sys.stdin.readline # EOF까지 받는 문제에서는 사용 금지
def cut(line) :
if (line.count('-') == 1) :
return line
else :
left = line[:len(line)//3]
mid = line[len(line)//3 : (len(line)//3 * 2)].replace('-'," ")
#print(f"mid = {mid}, len(mid) = {len(mid)}")
right = line[(len(line)//3 * 2):]
array = cut(left) + mid + cut(right)
return array
def main() :
while True :
try :
n = int(input())
if not (0<= n <= 12) :
break
n = 3**n
line = '-'*n
print(cut(line))
except EOFError :
break
if __name__ == "__main__" :
main()
느낀점
1. EOF까지 입력 받는 문제에서는 sys.stdin.readline 금지. (이것때매 오류 잡느라 10분 쓴듯)
2. EOF까지 입력 받으려면 try - except EOFErroe 해줘야한다.
3. 재귀 연습을 더 해보자(감익히기)
풀이 시간

'알고리즘 > 백준' 카테고리의 다른 글
| 백준 2178번 : 미로 탐색(S1) (0) | 2025.02.06 |
|---|---|
| 백준 11866번 : 요세푸스 문제 0(S4) (0) | 2025.01.29 |
| 백준 1193번 : 분수찾기(S5) (0) | 2025.01.29 |
| 백준 18870번 : 좌표 압축(S2) (0) | 2025.01.28 |
| 백준 10814번 : 나이순 정렬(S5) (0) | 2025.01.28 |