S E P H ' S

[Python] 스티커 모으기(2) 본문

Algorithm/Programmers

[Python] 스티커 모으기(2)

yoseph0310 2021. 9. 7. 22:45
 

코딩테스트 연습 - 스티커 모으기(2)

N개의 스티커가 원형으로 연결되어 있습니다. 다음 그림은 N = 8인 경우의 예시입니다. 원형으로 연결된 스티커에서 몇 장의 스티커를 뜯어내어 뜯어낸 스티커에 적힌 숫자의 합이 최대가 되도록

programmers.co.kr

풀이

1. 첫 번째를 뜯거나 안뜯거나로 시작.

2. table[i]를 i번째 인덱스 까지의 얻을 수 있는 최댓값이라고 정의하면

    1) i-1 번째를 뗐을 경우 = i번째는 뗄 수 없다. i-1 번째 까지의 값 그대로

    2) i-1 번째를 떼지 않았을 경우 = i-2 번째 까지의 값, + sticker[i]

 

3. 초항은 

    1) i-1번째를 뗐을 경우 

        table[0], table[1] = sticker[0], table[0] 이고 마지막 인덱스 확인 안함 (2 ~ len(sticker) -1 )

    2) i-1번째를 뗐을 경우

        table[0], table[1] = 0, sticker[1] 이고 마지막 인덱스까지 확인

def solution(sticker):
    if len(sticker) == 1:
        return sticker[0]

    table1 = [0 for _ in range(len(sticker))]
    table1[0] = sticker[0]
    table1[1] = table1[0]
    for i in range(2, len(sticker) - 1):
        table1[i] = max(table1[i - 1], table1[i - 2] + sticker[i])
    value = max(table1)

    table1 = [0 for _ in range(len(sticker))]
    table1[0] = 0
    table1[1] = sticker[1]
    for i in range(2, len(sticker)):
        table1[i] = max(table1[i - 1], table1[i - 2] + sticker[i])

    return max(value, max(table1))

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 기지국 설치  (0) 2021.09.09
[Python] 숫자 게임  (0) 2021.09.07
[Python] 야근 지수  (0) 2021.09.07
[Python] 줄 서는 방법  (2) 2021.09.07
[Python] 최고의 집합  (0) 2021.09.05