스터디/코딩테스트

백준 4779 - 칸토어 집합

공대생철이 2024. 1. 17. 21:42
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