728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131130
분석
상자번호 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
카드번호 | 8 | 6 | 3 | 7 | 2 | 5 | 1 | 4 |
1. 상자를 열어서 카드 번호 확인 후 temp 리스트에 저장
2. 방문 한 상자 번호가 아닌 경우 상자 열어서 카드 번호 temp 리스트에 저장 반복
: 숫자에 해당하는 번호를 가진 상자를 계속해서 열어가며, 열어야 하는 상자가 이미 열려있을 때까지 반복합니다.
3. 저장을 반복하면서 temp 리스트에 이미 있는 경우 temp 리스트 길이를 한 group으로 저장
4. 가장 긴거 두개 곱해서 리턴 / 모두 연결되는 경우 (그룹이 하나인 경우)는 0 리턴
풀이
def solution(cards):
answer=0
group=[]
visited=[False]*(len(cards)+1)
for x in cards:
if not visited[x]:
temp=[]
while True:
if x in temp:
break
temp.append(x)
visited[x]=True
x=cards[x-1]
group.append(len(temp))
if len(group)>1:
group.sort(reverse=True)
answer = group[0]*group[1]
return answer
def solution(cards):
answer = []
for x in range(len(cards)):
temp = []
while cards[x] not in temp:
temp.append(cards[x])
x = cards[x]-1
answer.append([] if sorted(temp) in answer else sorted(temp))
answer.sort(key=len)
return len(answer[-1]) * len(answer[-2])
728x90