프로그래머스 - 풍선 터트리기 [월간 코드 챌린지 시즌1]

2026. 2. 3. 10:40·코테

문제 설명:

일렬로 나열된 n개의 풍선이 있습니다. 모든 풍선에는 서로 다른 숫자가 써져 있습니다. 당신은 다음 과정을 반복하면서 풍선들을 단 1개만 남을 때까지 계속 터트리려고 합니다.

임의의 인접한 두 풍선을 고른 뒤, 두 풍선 중 하나를 터트립니다.
터진 풍선으로 인해 풍선들 사이에 빈 공간이 생겼다면, 빈 공간이 없도록 풍선들을 중앙으로 밀착시킵니다.
여기서 조건이 있습니다. 인접한 두 풍선 중에서 번호가 더 작은 풍선을 터트리는 행위는 최대 1번만 할 수 있습니다. 즉, 어떤 시점에서 인접한 두 풍선 중 번호가 더 작은 풍선을 터트렸다면, 그 이후에는 인접한 두 풍선을 고른 뒤 번호가 더 큰 풍선만을 터트릴 수 있습니다.

당신은 어떤 풍선이 최후까지 남을 수 있는지 알아보고 싶습니다. 위에 서술된 조건대로 풍선을 터트리다 보면, 어떤 풍선은 최후까지 남을 수도 있지만, 어떤 풍선은 무슨 수를 쓰더라도 마지막까지 남기는 것이 불가능할 수도 있습니다.

일렬로 나열된 풍선들의 번호가 담긴 배열 a가 주어집니다. 위에 서술된 규칙대로 풍선들을 1개만 남을 때까지 터트렸을 때 최후까지 남기는 것이 가능한 풍선들의 개수를 return 하도록 solution 함수를 완성해 주세요.


입출력 예:

a result
[9, -1, -5] 3
[-16, 27, 65, -2, 58, -92, -71, -68, -61, -33] 6

문제 해결:

def solution(a):
    n = len(a)
    if n <= 2:
        return n

    left_min = [0] * n
    right_min = [0] * n

    m = a[0]
    for i in range(n):
        if a[i] < m:
            m = a[i]
        left_min[i] = m

    m = a[-1]
    for i in range(n - 1, -1, -1):
        if a[i] < m:
            m = a[i]
        right_min[i] = m

    
    answer = 0
    for i in range(n):
        if i == 0 or i == n - 1:
            answer += 1
        else:
            if not (a[i] > left_min[i - 1] and a[i] > right_min[i + 1]):
                answer += 1

    return answer

해결 설명:

left와 right로 나눠서 양 사이드에서 최솟값들을 찾는다, 이때 순서를 왼 -> 오 혹은 오-> 왼으로 나눠서

left_min, right_min으로 나눔

 

가정은 다음과 같다

left_min과 right_min 둘 다 a [i]보다 작으면 풍선이 살아남으니 min값을 찾는 것이다

또한, min을 left와 right에서 i부터 n까지 min값을 비교하면서 값을 집어넣으면 가능한 최솟값들이 나오게 된다

 

만약 큰 값을 남기게 된다면?

그래도 최후의 값으로 남기려면 최후 중 하나가 남아야 하므로 left_min, right_min 안에는 값이 있어야 하기 때문이다.

 

따라서 마지막에 값을 a [i]와 비교하고 answer에 +1씩 하여 정답값을 준다

'코테' 카테고리의 다른 글

프로그래머스 - 섬 연결하기 [탐욕법(Greedy)]  (0) 2026.02.19
프로그래머스 - 야근 지수 [연습문제]  (0) 2026.02.18
프로그래머스 - 지형 이동 [Summer / Winter Coding (2019)]  (1) 2026.02.02
프로그래머스 - 최적의 행렬 곱셈 [연습문제  (0) 2026.01.29
프로그래머스 - 최고의 집합 [연습 문제]  (0) 2026.01.28
'코테' 카테고리의 다른 글
  • 프로그래머스 - 섬 연결하기 [탐욕법(Greedy)]
  • 프로그래머스 - 야근 지수 [연습문제]
  • 프로그래머스 - 지형 이동 [Summer / Winter Coding (2019)]
  • 프로그래머스 - 최적의 행렬 곱셈 [연습문제
junsky00
junsky00
대기만성?
  • junsky00
    편안한 마음으로 꽃 구경하기
    junsky00
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • 코테 (21)
      • IT 뉴스 (4)
      • SKALA (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테
    구현
    스택
    보고서 생성
    Google Paper
    동적 프로그래밍
    Python
    AI agent
    카카오
    큐
    프로그래머스
    PAPER
    코딩 테스트
    BFS
    SK AX
    파이썬
    DP
    탐색
    AI
    LLM 잘 쓰기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
junsky00
프로그래머스 - 풍선 터트리기 [월간 코드 챌린지 시즌1]
상단으로

티스토리툴바