실버1 : DFS 문제이다.

풀이

DFS와 동적계획법이 섞인 문제이다. 일단, 특정 위치까지 갈 수 있는 모든 경우의 수를 구해야 하는데, 그냥 방문할 때마다 count를 늘려준다면, 중복해서 방문하는 곳이 너무 많아 비효율 적이다.

그렇기 때문에, 특정 시작 지점에서 가질 수 있는 경우의 수를 잡고, 이 경우의 수를 잡기 위해서는 다음 방문의 경우의 수를 더해주는 것으로 해결할 수 있다.

이 때, 중간 방문 지점이 0인 경우 그냥 시작에서 끝까지의 답을 구하면되고, 그렇지 않을 경우 중간지점까지, 그리고 중간지점에서 끝지점까지 구하는 것으로 문제를 해결한다.

Code

import string
 
a = input()
 
alphabet_lower = string.ascii_lowercase
alphabet_upper = string.ascii_uppercase
ret_string = ""
for char in a:
    if char in alphabet_lower:
        pos = alphabet_lower.find(char)
        char = alphabet_lower[(pos + 13) % len(alphabet_lower)]
    elif char in alphabet_upper:
        pos = alphabet_upper.find(char)
        char = alphabet_upper[(pos + 13) % len(alphabet_upper)]
    ret_string += char
 
print(ret_string)

Reference