[풀이 방법]

  • 해당 문제는 주어진 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]

+ Recent posts