카테고리 없음
혼자 놀기의 달인
수타.
2023. 6. 22. 19:09
https://school.programmers.co.kr/learn/courses/30/lessons/131130
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약:
리스트 요소들이 1부터 리스트 개수까지인 리스트가 있을때, 리스트 요소 > 그 요소번째의 리스트를 반복 하며 연결되어있는 개수중 제일큰 두개를 곱한수를 반환
> 사실 문제 이해를 못해 많이 해맸는데, 집합의 개수중 큰 2개를 골라 그 곱을 반환하는거였다.
난이도 2
소요시간 :
40분
코드:
from collections import Counter
def solution(cards):
n = len(cards)
#arr은 선택여부
arr = [0]* (n)
t =1
while t<=n:
#t는 t번 그룹
#비어있는곳 부터 시작
for j in range(n):
if arr[j]==0:
s = j
break
while True:
if arr[s] == 0 :#아직 선택이 안됐다면
arr[s] = t
s = cards[s] -1
else:
break
t+=1
piv = list(Counter(arr).values())
piv.sort(reverse =True)
return piv[0]*piv[1] if len(piv)>=2 else 0
먼저 같은 크기의 빈 리스트를 만든뒤 n번반복해서 몇개의 그룹으로 묶어 리스트로 저장하고 리스트에서 각 그룹의 개수를 세고 그중 제일 큰거 두개를 뽑아 곱해주었다. 어려운문제는 아니었지만 문제설명을 좀더 잘 이해했다면 금방 풀었을 것 같다.