반응형
programmers.co.kr/learn/courses/30/lessons/68646
코딩테스트 연습 - 풍선 터트리기
[-16,27,65,-2,58,-92,-71,-68,-61,-33] 6
programmers.co.kr


어떻게 접근해야 할지 모르겠어서, 다른 블로그의 풀이를 참고했다.
[프로그래머스]#68646 풍선 터트리기
문제일렬로 나열된 n개의 풍선이 있습니다. 모든 풍선에는 서로 다른 숫자가 써져 있습니다. 당신은 다음 과정을 반복하면서 풍선들을 단 1개만 남을 때까지 계속 터트리려고 합니다.임의의 인��
velog.io
핵심은
1. 리스트의 맨 앞 / 맨 뒷값은 항상 남을 수 있다.
ex) [-3,-7,-5] 값이 있다면, 문제 조건상 어떻게든 -3과 -5를 남길 수 있다. 한 번은 번호가 큰 풍선을 터트릴 수 있기 때문.
2. 리스트 중간에 있는 값 = 자신 위치의 좌/우 리스트의 최솟값보다 작을 경우 살아남을 수 있다.
기본적으로 두 개의 풍선 중 큰 풍선을 터트려야 한다 == 현재 위치의 좌/우 최솟값보다 작다면 풍선은 마지막까지 살아남을 수 있다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import math | |
def solution(a): | |
# 맨 앞, 맨 뒷 풍선은 어떻게든 남길 수 있다. | |
# 가운데에 있는 풍선은, 자신을 둘러싼 풍선의 최솟값보다 작다면 남을 수 있다. | |
answer = 0 | |
left, right = math.inf, math.inf | |
maps = [[0 for _ in range(len(a))] for _ in range(2)] | |
# 인접한 풍선 중 번호가 큰 풍선을 터트린다. | |
# 왼쪽 기준으로, 번호가 작은 풍선을 남기는 경우 | |
for i in range(len(a)): | |
if left > a[i]: | |
left = a[i] | |
maps[0][i] = left | |
# 오른쪽 기준으로, 번호가 작은 풍선을 남기는 경우 | |
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)): | |
if a[i] <= maps[0][i] or a[i] <= maps[1][i]: | |
answer += 1 | |
return answer |
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스. 줄 서는 방법 (Level 3) (0) | 2020.10.06 |
---|---|
[Python] 프로그래머스. JadenCase 문자열 (Level 2) (1) | 2020.10.05 |
[Python] 프로그래머스. 삼각 달팽이 (Level 2) (0) | 2020.09.23 |
[Python] 백준 2156. 포도주 시식 (0) | 2020.09.11 |
[Python] 프로그래머스. 2020 카카오 recruit - 블록 이동하기 (Level 3) (0) | 2020.09.07 |