[프로그래머스/Level3] 풍선 터뜨리기 (JAVA)
📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
a의 길이가 기니까 풍선 갯수(n)를 늘려가며 규칙성을 찾아보자..
- n이 1이면, 무조건 풍선이 하나 남으므로 1 반환
- n이 2면, 2가지(1번 풍선이 작고 2번 풍선이 큰 경우 / 1번 풍선이 크고 2번 풍선이 작은 경우)이므로 낮은 풍선 터트리는 기회를 사용하지 않고 2 반환
- n이 3이면, 가운데 풍선을 기준으로 4가지 경우의 수로 나눈다.
ㄴ 가운데 풍선 기준, 왼쪽은 작고 오른쪽은 큰 경우
ㄴ 가운데 풍선 기준, 왼쪽은 크고 오른쪽은 작은 경우
ㄴ 가운데 풍선 기준, 왼쪽은 작고 오른쪽도 작은 경우
ㄴ 가운데 풍선 기준, 왼쪽은 크고 오른쪽도 큰 경우
그러면 맨 왼쪽 풍선과 맨 오른쪽 풍선은 무조건 남을 수 있는 풍선이라는 걸 알 수 있다.
이를 통해 맨 왼쪽 풍선과 맨 오른쪽 풍선을 제외하고 반복문을 순회하면서
비교하려고 하는 풍선의 왼쪽 그룹의 최솟값과 오른쪽 그룹의 최솟값을 비교해
둘 다 작다면 해당 풍선은 건너뛰고 다음 풍선을 확인한다.
🔺 코드
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
29
30
31
32
33
34
35
|
import java.util.*;
class Solution {
public int solution(int[] a) {
int size = a.length;
if(size == 1) return 1; // 풍선 개수가 1개면 1개만 남길 수 있음
int[] leftMin = new int[size]; // 각 인덱스에서 왼쪽 원소의 최소값 저장
int[] rightMin = new int[size]; // 각 인덱스에서 오른쪽 원소의 최대값 저장
int l = a[0]; // 왼쪽 값 중 최소값
int r = a[size -1]; // 오른쪽 값 중 최소값
// i일 때 왼쪽 원소의 최소값 저장
for(int i = 1 ; i < size -1 ; i++) {
if(l > a[i]) // 왼쪽 끝+1의 요소가 left보다 작으면 남길 수 있음
l = a[i];
leftMin[i] = l;
}
// i일 때 오른쪽 원소의 최소값 저장
for(int i = size -2 ; i > 0 ; i--) {
if(r > a[i]) // 오른쪽 끝-1의 요소가 right보다 작으면 남길 수 있음
r = a[i];
rightMin[i] = r;
}
int answer = 2; // 최후까지 남기는 게 가능한 풍선들 개수 (풍선이 2개 이상이면 2개부터 시작)
for(int i = 1 ; i <= size -2 ; i++) {
if(a[i] > leftMin[i] && a[i] > rightMin[i]) continue; // 양쪽의 최솟값보다 크다면 continue
answer++;
}
return answer;
}
}
|
cs |
➕ 다른 풀이 방식
HashSet을 활용한 풀이 !!!🙊🙊
import java.util.*;
class Solution {
public int solution(int[] a) {
int answer = 0;
int min1 = Integer.MAX_VALUE;
int min2 = Integer.MAX_VALUE;
HashSet<Integer> hs = new HashSet<>();
for(int i = 0 ; i < a.length ; i++){
min1 = Math.min(min1, a[i]);
min2 = Math.min(min2, a[a.length -1 -i]);
hs.add(min1);
hs.add(min2);
}
return hs.size();
}
}
💦 어려웠던 점
- 규칙을 못 찾겠으면 역시 직접 그려보고 규칙을 찾는 수밖에 없는 것 같다,,
🧐 새로 알게 된 내용
- 다아아아아아...
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[프로그래머스]풍선 터트리기 - JAVA
[프로그래머스]풍선 터트리기 코딩테스트 연습 - 풍선 터트리기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 풍선 터트리기 [-16,27,65,-2,58,-92,-71,-68,-61,-33] 6 programmers.co.kr 풀이 이 문제의 조건
moonsbeen.tistory.com
[Programmers] 풍선 터트리기 (Java)
1. 문제요약 코딩테스트 연습 - 풍선 터트리기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등
g-egg.tistory.com
[프로그래머스] 풍선 터트리기 Java 풀이
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다. 틀리거나 잘못된 정보가 있을 수 있습니다. 댓글로 알려주시면 수정하도록 하겠습니다. 1. 문제 일렬로 나열된 n개의 풍선이 있습니다. 모
small-stap.tistory.com
[프로그래머스 level_3 / 월간 코드 챌린지 시즌 1] 풍선 터트리기 for JAVA
programmers.co.kr/learn/courses/30/lessons/68646 코딩테스트 연습 - 풍선 터트리기 [-16,27,65,-2,58,-92,-71,-68,-61,-33] 6 programmers.co.kr [문제 설명] 일렬로 나열된 n개의 풍선이 있습니다. 모든 풍선에는 서로 다른
tosuccess.tistory.com
친절한 설명..
[java] 프로그래머스 (풍선 터트리기) Level 3
Problem : https://programmers.co.kr/learn/courses/30/lessons/68646 코딩테스트 연습 - 풍선 터트리기 [-16,27,65,-2,58,-92,-71,-68,-61,-33] 6 programmers.co.kr Approach 월간 코드 챌린지 시즌1 문제였다. 문제의 조건은 다음과
gre-eny.tistory.com