[풀이 방법]
- 해당 문제는 주어진 cards라는 리스트에서 Circular한 그룹이 몇개가 있는지, 각 길이가 어떠한지 알아야 하는 문제입니다.
- 배열 요소를 따라가는 것은 Circular한 성질을 가지고 있으므로, 1개 이상의 그룹이 만들어집니다.
- 또한 cards에는 중복된 요소가 들어가 있지 않으므로, 모든 요소를 탐색(즉, 모든 그룹을 탐색)하게 되면 배열의 모든 index를 탐색하게 됩니다.
- 따라서, 배열의 모든 요소가 탐색될 때까지 문제 조건에 맞춰 그룹화를 해주었습니다.
[풀이 코드]
# 두 개의 그룹의 곱이 최대가 되는 값을 찾아야한다.
# 그룹은 어떤 수로 시작해도 같은 그룹이 만들어진다.
def solution(cards):
answer = 0
group = []
isopen = [-1] * len(cards)
rnd = 1
while isopen.count(-1) != 0:
idx = isopen.index(-1)
isopen[idx] = rnd
while True:
idx = cards[idx] - 1
isopen[idx] = rnd
if isopen[cards[idx] - 1] == rnd:
break
group.append(isopen.count(rnd))
rnd += 1
group.sort()
return 0 if len(group) <= 1 else group[-1] * group[-2]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/python] 피로도 (0) | 2023.03.24 |
---|---|
[프로그래머스/python] 두 큐 합 같게 만들기 (0) | 2023.03.22 |
[프로그래머스/python] 택배 상자 (0) | 2023.03.17 |
[프로그래머스/python] 디펜스 게임 (0) | 2023.03.14 |
[프로그래머스/python] 덧칠하기 (0) | 2023.03.14 |