[Programmers] P68646 풍선 터트리기

Question

Language: Python

Difficulty: Gold 4~5?

이번 문제는 문제의 내용을 이해하는 것이 중요하다 인접한 풍선을 골라서, 터뜨리는 과정을 반복하는데, 번호가 작은 풍선을 터뜨리는 기회는 오직 한번이다.

위와 같은 규칙이 존재할 때, 최후에 남을 수 있는 풍선의 개수를 구하는 것이 목적이다.

풍선을 터뜨리를 수 없는 경우는 아래와 같이, 자신을 기준으로, 왼쪽의 최솟값보다 크고, 오른쪽의 최솟값보다 크게 되면 해당 풍선은 최후까지 남을 수 없다.

[-2, 1,-4]

[-2,1] 선택 시

  • -2를 선택하는 경우, [1,-4] 항상 1을 선택해야하므로 1은 제거될 수 밖에 없다.

[1,-4] 선택 시

  • -4를 선택하는 경우, [-2,1] 항상 1을 선택해야하므로 1은 제거될 수 밖에 없다.

즉, 양옆의 최소값보다 모두 큰 경우, 항상 제거 될 수 밖에 없다. 따라서, 리스트를 순회하면서 왼쪽, 오른쪽의 최솟값에 대해서 비교하면서, 데이터가 남을 수 있는지 없는지를 판단해야한다.

Solution

from math import inf

def solution(a):
    data_length=len(a)
    available=[0] * data_length
    
    min_left,min_right=inf,inf
    
    for i in range(data_length):
        if a[i] < min_left:
            min_left= a[i]
            available[i]=1
            
        if a[-i-1] < min_right:
            min_right= a[-i-1]
            available[-i-1]=1
            
    answer=sum(available)
    return answer

댓글남기기