LEVEL3/풍선 터뜨리기

Q·2021년 7월 29일
0

문제 설명


전체 코드

def solution(a):
    result = [0 for _ in range(len(a))]
    minFront, minRear = float("inf"), float("inf")

    for i in range(len(a)):
        if a[i] < minFront:
            minFront = a[i]
            result[i] = 1
        if a[-1-i] < minRear:
            minRear = a[-1-i]
            result[-1-i] = 1

    return sum(result)

해결 방법

이 문제는 코드를 만드는 것은 어렵지 않지만 해결 방법을 생각하는 것이 어려운 문제이다. 문제의 해결방법은 a의 리스트에서 어떠한 원소를 기준으로 그 원소의 왼쪽과 오른쪽둘 중 어느 한 방향중에 자기보다 큰 수들만 존재한다면 이 수는 마지막까지 남기는 것이 가능하다. 따라서 result하는 a와 같은 길이에 0으로 채워진 리스트를 만들고 minFront, minRear에 float("inf")의 큰수를 만들어 놓는다. 그 후 for문을 돌려 어떠한 원소를 기준으로 왼쪽에서 자기가 가장 작은 수이면 그 수를 minFront에 담고 result[i]에 1을 넣는다. 반대로 어떠한 원소를 기준으로 오른쪽에서 자기가 가장 작은 수이면 그 수를 minRear에 담고 result[i]에 1을 넣는다.

  • 이걸 어떻게 생각해낼까... 역시 해결능력이 정말 중요하다.
profile
Data Engineer

0개의 댓글