본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 3182번 한동이는 공부가 하기 싫어!

by 현장 2022. 5. 15.

-Code

def dfs(start, cnt):
    visited[start] = True
    g = graph[start][0]
    if not visited[g]:
        cnt = dfs(g, cnt + 1)
    return cnt


n = int(input())
graph = [[] for _ in range(n + 1)]
result = [0] * (n + 1)
for i in range(1, n + 1):
    h = int(input())
    graph[i].append(h)

for i in range(1, n + 1):
    visited = [False] * (n + 1)
    result[i] = dfs(i, 1)

print(result.index(max(result)))

-처음코드

def dfs(start):
    global cnt
    visited[start] = True
    for i in range(1, n + 1):
        if not visited[i] and graph[start][i]:
            cnt += 1
            dfs(i)
    return cnt


n = int(input())
graph = [[0 for _ in range(n + 1)] for _ in range(n + 1)]
result = 0
for i in range(n):
    h = int(input())
    graph[i][h] = 1

for i in range(1, n + 1):
    visited = [False] * (n + 1)
    cnt = 0
    result = max(result, dfs(i))
print(result)

처음에 두번째 코드로 짜서 예시 입출력은 다 나오나 시간 초과로 틀려서 찾아보니 전 문제처럼 잡고 n * n개 보다 적게 검사하여 풀면 해결이 되는 문제여서 아쉬웠습니다.