LEVEL3/풍선 터뜨리기
문제 설명
전체 코드
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)
해결 방법
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을 넣는다.
- 이걸 어떻게 생각해낼까... 역시 해결능력이 정말 중요하다.
Author And Source
이 문제에 관하여(LEVEL3/풍선 터뜨리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bbkyoo/LEVEL3풍선-터뜨리기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)