카테고리 없음

혼자 놀기의 달인

수타. 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번반복해서 몇개의 그룹으로 묶어 리스트로 저장하고 리스트에서 각 그룹의 개수를 세고 그중 제일 큰거 두개를 뽑아 곱해주었다. 어려운문제는 아니었지만 문제설명을 좀더 잘 이해했다면 금방 풀었을 것 같다.