프로그래머스 Lv2> 혼자 놀기의 달인

SeiLyn·2024년 2월 29일

프로그래머스

목록 보기
6/6

https://school.programmers.co.kr/learn/courses/30/lessons/131130

❓ 문제

프로그래머스 Lv.2 문제 > 혼자 놀기의 달인

❗ 해결

https://www.acmicpc.net/problem/2346
백준 풍선 터뜨리기랑 비슷한 느낌의 문제였다.
다행히 카드 길이가 100장 이하길래 아 완전탐색으로 풀어도 되겠구나..싶었음..
설명은 주석으로 달았다.

def solution(cards):
    
    # 이미 열어본 상자인지 확인
    opened = [False] * len(cards)
    group = []
	
    # 카드 배열을 순회하면서 
    for index, value in enumerate(cards):
        
        # 카운트 변수를 0으로 초기화 해준다.
        cnt = 0
        while True:
            # 만약에 순회하다가 이미 연 상자를 만났으면(순회가 끝났으면)
            # 카드 그룹에 카드 개수를 append해주고 반복문을 빠져 나온다.
            if opened[index]:
                group.append(cnt)
                break
            
            # 열지 않은 상자라면 
            # 열었다는 표시 (opened[index]를 True로 바꿔준다.)
            # 그리고 index를 상자안에 담긴 카드 숫자로 변경한다.
            # 카드값을 갱신해주고, 카드 카운트 수를 1 증가시킨다.
            if not opened[index]:
                opened[index] = True
                index = value - 1
                value = cards[index]
                cnt += 1
    # 그룹을 정렬 해준다.
    group.sort(reverse=True)
    
    # 만약 group의 길이가 1개라면 ( 그룹이 한개밖에 존재하지 않는다면 점수는 0)
    if len(group) == 1:
        return 0
    # 그렇지 않다면 첫번째 그룹과 두번째 그룹을 곱한 값을 반환해준다.
    else:
        return group[0] * group[1]
    

0개의 댓글