개발자 톡

연습문제 톡 효도 여행

시간 초과 관련 문의

등록일
2024-02-21 14:53:42
조회수
555
작성자
hhs511
import sys
sys.setrecursionlimit(10000)
n, m = map(int, sys.stdin.readline().split())
s = sys.stdin.readline()
h = [[""]*(n+1) for _ in range(n+1)]

graph = [ [] for _ in range(n+1)]

for i in range(n-1) :
    u, v, c = map(str, sys.stdin.readline().split())
    u, v = int(u), int(v)
    h[u][v] = str(c)
    h[v][u] = str(c)
    graph[u].append(v)
    graph[v].append(u)

#print(graph)
visited = [0] * (n+1)
visited[1] = 1
ans = -1
def LCS(b) :
    global ans
    a_len = len(s)
    b_len = len(b)
    d = [[0]*(b_len+1) for _ in range(a_len+1)]
    for i in range(1, a_len+1) :
        for j in range(1, b_len+1) :
            if s[i-1] == b[j-1] :
                d[i][j] = d[i-1][j-1] + 1
            else :
                d[i][j] = max(d[i-1][j], d[i][j-1])            
    if ans < d[a_len][b_len] :
        ans = d[a_len][b_len]
    
def dfs(u, road) :
    global visited
    #print(u, end= " ")
    #print(road)
    flag = 0
    for v in graph[u] :
        if visited[v] == 0 :
            flag = 1
            visited[v] = 1
            dfs(v, road+h[u][v])
            visited[v] = 0
    if flag == 0 :
        #print(road)
        LCS(road)
        return
        
dfs(1,"")

print(ans)


20개 중 5개 케이스에 대해서 시간초과가 나는데 어떤 방법으로 해결하면 좋을지 의견을 구합니다.

#효도_여행
#시간초과
#dfs
#lcs

이 카테고리의 톡 더보기