문제
https://school.programmers.co.kr/learn/courses/30/lessons/131130
설계
- 각 상자를 모두 묶음으로 분류한 후 묶음별 개수로 정렬한다.
def solution(cards):
visit = [0] * len(cards)
cnt = 0 # 상자의 개수
box = [[]]
for i in range(len(cards)):
index = i
while sum(visit) < len(cards): # 모든 상자를 분류 할때까지 확인
if visit[index] == 0:
visit[index] = 1
box[cnt].append(cards[index])
index = cards[index] - 1
else: # index 값이 끝났다면
box.append([])
cnt += 1 # 각 상자를 채웠다고 표시
break
box.sort(key=len, reverse=True) # 상자가 많은 개수대로 정렬
if len(box) >= 2:
return len(box[0]) * len(box[1])
else:
return 0 # 박스가 1그룹만 있으면 0 반환
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 이상한 문자 만들기 - 파이썬 (0) | 2023.01.02 |
---|---|
[프로그래머스] 거리두기 확인하기 - 파이썬 (0) | 2022.12.23 |
[프로그래머스] 숫자 카드 나누기 - 파이썬 (0) | 2022.12.18 |
[프로그래머스] 땅따먹기 (0) | 2022.12.14 |
[프로그래머스] 피로도 (0) | 2022.12.13 |