728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/68646?language=python3
코딩테스트 연습 - 풍선 터트리기
[-16,27,65,-2,58,-92,-71,-68,-61,-33] 6
programmers.co.kr
최종 코드
GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음
프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.
github.com
def solution(a):
min_left, min_right = 1000000001, 1000000001
check = [0]*len(a)
for i in range(len(a)):
if a[i] < min_left:
min_left = a[i]
check[i] = 1
if a[-1-i] < min_right:
min_right = a[-1-i]
check[-1-i] = 1
return sum(check)
풀이 과정
1 <= len(a) <= 1,000,000이기 때문에 모든 경우에 대해서 풍선을 터트리는 시뮬레이션을 돌리면 시간 초과가 난다.
남길 풍선을 기준으로 왼쪽 방향에 있는 풍선들 중 가장 작은 값과 오른쪽 방향에 있는 풍선들 중 가장 작은 값을 비교해준다.
둘 중 한 방향에 남기려고 하는 풍선의 숫자가 더 작다면 해당 풍선을 터트리지 않고 남길 수 있다.
def solution(a):
#초기값 설정
min_left, min_right = 1000000001, 1000000001
#풍선 체크
#check[i] = 1 -> i번째 풍선을 터트리지 않고 남길 수 있다
check = [0]*len(a)
for i in range(len(a)):
#i번째 풍선이 왼쪽에 있는 풍선들 중 가장 작은 값인 경우, i번째 풍선을 터트리지 않고 남길 수 있다
if a[i] < min_left:
#min_left 갱신
min_left = a[i]
check[i] = 1
#뒤에서 i번째 풍선이 오른쪽에 있는 풍선들 중 가장 작은 값인 경우, 뒤에서 i번째의 풍선을 터트리지 않고 남길 수 있다
if a[-1-i] < min_right:
min_right = a[-1-i]
check[-1-i] = 1
#터트리지 않고 남길 수 있는 풍선의 개수 return
return sum(check)
#시간복잡도 = O(n), 공간복잡도 = O(n)
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 [3차] 압축 <2018 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.03.28 |
---|---|
Level 2 [3차] 방금그곡 <2018 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.03.25 |
Level 3 공 이동 시뮬레이션 Python 3 (0) | 2022.03.22 |
Level 3 110 옮기기 Python 3 (0) | 2022.03.16 |
Level 3 퍼즐 조각 채우기 Python 3 (0) | 2022.03.15 |