풍선 터뜨리기 [python]

Jaymee·2021년 11월 8일
0

생각보다 많은 시간이 필요했던 문제이다.
어떻게 풀어야 하나 하면서 골치를 썩었다.


내가 내 왼쪽에 있는 숫자들 중 최솟값과 내 오른쪽에 있는 숫자들 중 최솟값 보다 크면 나는 끝까지 남을 수 없다.

이 말인 즉슨, 자기의 왼쪽 혹은 오른쪽에 자기보다 큰 수만 존재할 때 나는 남을 수 있다.

  1. 내 왼쪽에 있는 숫자들의 최솟값을 지속적으로 갱신한다.
  2. 그렇게 되면 항상 나는 최솟값이랑 비교하는데, 그 최솟값보다 내가 작다? 그러면 다 나보다 큰 수 들이구나~ 하고 카운팅할 수 있다.
  3. 처음 for문을 돌면 왼쪽으로는 판단이 가능하지만 오른쪽은 판단이 안된다.
  4. 그래서 뒤에서 부터 반복문을 도는 경우도 생각해야 한다.
## 나를 기준으로 내 옆에 쭉 혹은 내 오른쪽 쭉에 나 보다 큰수만 있다? 나는 끝까지 남을 수 있다.
def solution(a):
    answer = [False]*len(a)
    minL = float("inf")
    minR = float("inf")
    ## 최솟값을 초기화 하면서 내가 그 수 보다 작으면 다 나보다 큰 수다.
    for i in range(len(a)):
        if a[i] < minL:
            minL = a[i]
            answer[i] = True
        if a[-1-i] < minR:
            minR = a[-1-i]
            answer[-1-i] = True
    return sum(answer)

https://velog.io/@eehwan/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%92%8D%EC%84%A0-%ED%84%B0%ED%8A%B8%EB%A6%AC%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC

profile
backend developer

0개의 댓글