[BOJ : 16948] 데스 나이트
문제 요구 사항 N x N 크기의 체스판에서, (r1, c1) → (r2 → c2) 로의 최소 이동 횟수를 출력한다. 해설 문제에서 주어지는 방향에 따라 BFS를 잘 구현하자. 일반적인 나이트의 움직임이 아니다. 코드
- KoaK
1. DP[0] = "-"
2. DP[n] = DP[n - 1] + (3 ^ (n - 1) 개의 공백) + DP[n - 1]
DP = ["" for _ in range(13)]
def f(n : int) -> str:
"""N 번째 칸토어 집합의 근사를 출력하는 함수"""
if DP[n] != "":
# N 번째 칸토어 집합이 이미 계산되어 있다면, 해당 값을 반환
return DP[n]
# N 번째 칸토어 집합을 계산하고 저장
DP[n] = f(n - 1) + " " * (3 ** (n-1)) + f(n - 1)
return DP[n] # N 번째 칸토어 집합 반환
DP[0] = "-" # 0 번째 칸토어 집합은 "-" 로 초기화
while 1:
# 파일의 끝에서 입력을 멈추기 위한 무한 루프 및 예외처리
try:
n = int(input()) # N 입력
except:
break
print(f(n)) # N 번째 칸토어 집합 출력