본문 바로가기
알고리즘/프로그래머스

혼자 놀기의 달인 파이썬 풀이

by 푸딩코딩 2023. 6. 21.
728x90
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(cards):
    Mval=0 #값을 갱신해가며
    for i in range(len(cards)): # 8,6,3,7...카드의 값으로 나오게된다.
        box=[0 for i in range (len(cards))] #카드순서대로 
        cnt1=0
        cnt2=0
        k=i
        while(box[k]==0): #박스가 열리지 않았을 때,
            cnt1+=1#상자1카운트+1
            box[k]=1#상자를 열어준다
            k=cards[k]-1 #숫자를 바꿔준다 
        #1박스의 수가 정해짐,
        idx2=0
        for j in range(len(box)):
            if box[j]==0: 
                idx2=j
                break#열리지 않은 가장 앞순번 박스를 가져옴
        #2번째박스
        for n in range(idx2, len(box)):
            m=n
            cnt2=0
            while(box[m]==0): #박스가 열리지 않았을 때,
                cnt2+=1#상자1카운트+1
                box[m]=1#상자를 열어준다
                m=cards[m]-1 #숫자를 바꿔준다 
            #2박스의 수가 정해짐
            if cnt1*cnt2>Mval:
                Mval=cnt1*cnt2
            #곱을 구해 갱신

        
    return Mval

잘 풀었다!! ><

옆에 a4용지를 두고 정리했다. 

박스의 열림유무를 체크하기위해 box배열을 cards크기만큼 생성하고, 열었을 때 1을 넣어준다.

1박스/2박스 나누어서 곱해주어, Mval보다 크다면 값을 갱신해준다.

728x90
반응형