[프로그래머스] 혼자 놀기의 달인 (python)
문제설명
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131130
Idea
특정 인덱스를 기반으로 cards를 탐색해 해당 리스트 값을 새 인덱스로 설정하며 cards를 탐색합니다.
이미 탐색된 cards에 접근한 경우 탐색을 종료하고, 이 때까지 탐색된 수량을 저장합니다.
전체 cards를 모두 탐색할 때까지 위를 반복합니다.
탐색이 종료된 경우 탐색된 수량이 2개 이상이면 최대 수량 2개의 곱을, 1개 이하면 0을 반환합니다.
Solution 01
def solution(cards):
ans = []
for i in range(len(cards)):
cnt = 0
pts = i
while cards[pts]:
cnt += 1
temp = cards[pts]
cards[pts] = 0
pts = temp - 1
if cnt: ans.append(cnt)
ans.sort()
return 0 if len(ans) < 2 else ans[-1] * ans[-2]
0~N-1까지 돌며, 탐색하지 않은 cards[pts]라면 해당 값을 pts 변수에 저장하고 방문한 수량(cnt)을 증가합니다.
이미 방문한 cards라면 그 전까지의 수량을 ans 변수에 저장합니다.
ans 변수를 오름차순으로 정렬한 뒤, 길이가 2 이상이면 -1 번째와 -2번째 길이의 곱을 반환합니다.
전체 코드는 깃허브에서 확인 가능합니다.
댓글
댓글 쓰기