1def solution(cards):
2 length = len(cards)
3 visited = [False] * length
4 answer = []
5
6 for i in range(length):
7 cnt = 0
8 cur = i
9 while not visited[cur-1]:
10 visited[cur-1] = True
11 cur = cards[cur-1]
12 cnt += 1
13 if cnt != 0:
14 answer.append(cnt)
15
16 if len(answer) <= 1:
17 return 0
18 answer.sort(reverse=True)
19 return answer[0]*answer[1]
문제
- 주어진 배열 cards를 순회한다
- cards[i]번째 원소를 방문한다, 이미 방문한 원소인 경우 그만한다
- 한번 이어서 방문한 원소를 그룹화한다고 할 때, 두 그룹의 원소개수의 곱의 최대값을 구하라
- TC
- input
[8,6,3,7,2,5,1,4]
- ouput
12
- input
해결방법
- while문을 한번 돌면서, 원소의 방문여부를 체크하고, 방문한 원소의 개수를 센다
- 그룹화된 원소를 answer에 추가한다
- answer를 내림차순으로 정렬하고, 첫번째 두번째 원소의 곱을 반환한다