문제 링크
https://programmers.co.kr/learn/courses/30/lessons/68646
코딩테스트 연습 - 풍선 터트리기
[-16,27,65,-2,58,-92,-71,-68,-61,-33] 6
programmers.co.kr
문제 풀이 - 다른 블로그 참고
자신 기준 왼쪽/ 오른쪽 리스트의 최솟값 둘 중 하나 이상보다 작을 경우 살아남을 수 있다.
- 왼쪽/ 오른쪽 리스트의 최솟값보다 클 경우 : 작은 숫자 한번 터트려도 두개의 숫자가 남게 되므로, 하나만 남길 수 없다.
- 왼쪽 리스트의 최솟값보다 작거나, 오른쪽 리스트의 최솟값보다 작을 경우 (하나의 최솟값보단 크고, 하나의 최솟값보단 작을 경우) : 큰 숫자를 터트리고, 작은 숫자 한 번 터트리면 하나만 남길 수 있다.
- 왼쪽/ 오른쪽 리스트의 최솟값보다 작을 경우 : 큰 숫자들만 터트려도 하나만 남게 된다.
INF = int(1e9)
def solution(a):
answer = 0
left , right = INF, INF
# 각 숫자별 본인 왼쪽에 본인보다 제일 작은 수
# 각 숫자별 본인 오른쪽에 본인보다 제일 작은수
maps = [[ 0 for _ in range(len(a))] for _ in range(2)]
# i 인덱스 왼쪽에 a[i]보다 가장 작은 수
for i in range(len(a)):
if left > a[i]:
left = a[i]
maps[0][i] = left
# i 인덱스 오른쪽에 a[i]보다 가장 작은 수
for i in range(len(a)-1, -1, -1):
if right > a[i]:
right = a[i]
maps[1][i] = right
for i in range(len(a)):
# a[i] 기준 오른쪽이나 왼쪽의 최솟값보다 작거나 같을 경우 (가장 작은 수가 본인일 수도 있음)
if a[i] <= maps[0][i] or a[i] <= maps[1][i]:
answer += 1
return answer
'개발 > algorithm' 카테고리의 다른 글
[백준 10844번] 쉬운 계단수 -python (0) | 2022.01.23 |
---|---|
[백준 1300번] K번째 수 -python (0) | 2022.01.23 |
[프로그래머스][level3] 광고 삽입 -python (0) | 2022.01.22 |
[프로그래머스][level3] 표 편집 -python (0) | 2022.01.22 |
[프로그래머스][level3] [1차] 셔틀버스 -python (0) | 2022.01.22 |