풍선 터트리기
문제정의
나란히 있는 두 풍선을 임의로 선택하여 그 중에 큰 쪽을 터트린다. 단, 한번은 더 작은 숫자의 풍선을 터트릴 수 있다. 풍선이 1개가 남을 때 까지 터트릴 때, 최후에 남을 수 있는 풍선의 갯수를 반환하라.
문제풀이
전체 코드는 다음과 같다. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29import java.util.ArrayList;
public class BallonPop {
//프로그래머스 문제풀이 level3 풍선 터트리기
public static void main(String[] args) {
int[] a = {9,1,5};
int[] left = new int[a.length];
int[] right = new int[a.length];
left[0] = a[0];
right[a.length-1] = a[a.length-1];
for(int i = 1; i < a.length; i++)
left[i] = left[i-1] > a[i] ? a[i] : left[i-1];
for(int i = a.length-2; i >= 0; i--)
right[i] = right[i+1] > a[i] ? a[i] : right[i+1];
int answer = 0;
for(int i = 0; i < a.length; i++)
answer = (left[i] < a[i]) && (right[i] < a[i]) ? answer : answer+1;
System.out.println(answer);
}
}
시간 복잡도는 \(O(n)\)이다.
테스트
요새 문제풀이를 통 못했는데 일단 난이도가 어려워져서 고민하는 시간이 많아 포스팅 하는 텀이 길어진다. 물론 이 풀이도 질문하기에서 본 접근방법을 참고한 거라 공부가 많이 필요하다고 느낀다. 패스트캠퍼스에서 주관하는 네카라쿠배 교육과정의 2차테스트를 치르고 있는 중인데, 혼자 공부하는 것보단 학원이 나을 것 같아서 최선을 다해 테스트에 임하려고 한다. 그래도 혼자 공부하는 시간을 줄이진 말아야지. 화이팅!