728x90
처음 든 생각
- 재귀로 3 그룹씩 쪼개가면서 풀면 되겠다.
- 근데 리턴 조건을 어떻게 설정해야 되지...?
나의 답
def cantor(n):
if n == 1:
return "-"
else:
left = cantor(n//3)
center = " " * (n //3)
return left + center + left
while True:
try:
N = int(input())
result = cantor(3**N)
print(result)
except:
break
3개의 그룹으로 쪼개고 왼쪽 오른쪽은 또 칸토어한 결과를 더해주는 것이다.
N = 2를 예시로 들면
cantor(3) | " " 3개 | cantor(3)
cantor(1) " " cantor(1) | " " 3개 | cantor(1) " " cantor(1)
이렇게 되는 구조다.
결국 1개만 남을 때 "-"를 리턴해주면 되는 거였다.
그 다음 입력에서 애를 먹었다.
조건을 보면 파일의 끝에서 입력을 멈춘다고 했다.
계속 숫자를 받으면서 칸토어를 출력하는데 끝에 다다르면 멈춰야 되는 것이다.
이건 외우자.
while True:
try:
except:
break
계속 시도하다가 끝나면 멈추는 try - except 구문이다.
솔직히 논리로는 바로 나왔는데 구현에서 시간을 너무 많이 썼다. 재귀에 대한 나의 구현 능력이 얼마나 부족한지를 깨닫는 문제였다.
728x90
'스터디 > 코딩테스트' 카테고리의 다른 글
백준 24511 - queuestack (0) | 2024.01.22 |
---|---|
백준 28279 - 덱 2 (2) | 2024.01.21 |
SWEA 5177 - 이진 힙 (0) | 2024.01.17 |
SWEA 5147 - Subtree (0) | 2024.01.16 |
SWEA 5110 - 수열 합치기 (0) | 2024.01.16 |