Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UnrealEngine4
- 백준
- C++
- 줄 세우기
- 2294
- baekjoon
- NRVO
- winapi
- Unreal Engine5
- softeer
- const
- 오블완
- 티스토리챌린지
- GeeksForGeeks
- DeferredRendering
- 언리얼엔진5
- Programmers
- RVO
- 프로그래머스
- 팰린드롬 만들기
- 1563
- UnrealEngine5
- RootMotion
- IFileDialog
- UE5
- C
- Frustum
- directx
- DirectX11
- algorithm
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 풍선 터트리기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/68646
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
36
37
38
39
40
|
int solution(vector<int> a)
{
if (a.size() <= 2) return a.size();
int answer = 2;
int minIndex = 0;
int minValue = 0x3f3f3f3f;
for (int i = 0; i < a.size(); ++i)
{
if (a[i] < minValue)
{
minValue = a[i];
minIndex = i;
}
}
minValue = a[0];
for (int i = 1; i < minIndex; ++i)
{
if (a[i] < minValue)
{
minValue = a[i];
++answer;
}
}
minValue = a[a.size() - 1];
for (int i = a.size() - 2; i > minIndex; --i)
{
if (a[i] < minValue)
{
minValue = a[i];
++answer;
}
}
if (minIndex == 0 || minIndex == a.size() - 1) return answer;
else return answer + 1;
}
|
cs |
탐색..으로는 최대크기가 100만이라 당연히 안되고, 1시간가량 고민하다 접근법에 대해서 다른분의 글을 통해 쉽게 이해할 수 있었습니다.
https://school.programmers.co.kr/questions/43693
이해만하면 코드작성은 위의 코드처럼 쉽습니다.
기준이 되는 값이 가장작은값의 왼쪽에 위치해있다고 가정했을 때, 기준이되는값은 자신의 왼쪽에있는 값들만 처리하면 살아남을 수 있습니다.
왜냐하면 자신의 왼쪽에 있는 것들을 제외한 나머지값들, 즉 자신과 가장작은값 사이에있는것들과 가장작은값 오른쪽에 있는것들은 가장작은값이 전부 터트려버리는게 가능하기 때문입니다.
그렇게 가장작은값을 이용해서 다 터트려버린 후, 딱 한번의 기회만 있는 '더 작은값을 터트리기'를 이용해서 가장 작은값을 터트려버리면 자신은 살아남을 수 있습니다.
그렇다면 자신의 왼쪽에 있는것들을 다 터트릴 수 있는지 확인해야하는데, 자신의 왼쪽에 자기보다 큰값들만 있으면 됩니다. 자기보다 큰값을 터트릴 기회는 무한이기 때문입니다.
이런식으로 양쪽끝에서 가장작은값까지 최소값을 갱신하면서 접근하면 됩니다.
마지막에 answer에 +1에서 +1은 가장작은값을 의미하는것인데(가장 작은값은 항상 살아남을 수 있습니다), 만약 가장작은값이 양쪽끝에 있다면 겹치니까 +1을 하지 않습니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 올바른 괄호의 개수 (0) | 2023.07.24 |
---|---|
[Algorithm] Programmers :: 양과 늑대 (0) | 2023.07.24 |
[Algorithm] Programmers :: 경주로 건설 (0) | 2023.07.18 |
[Algorithm] Programmers :: 보석 쇼핑 (0) | 2023.07.17 |
[Algorithm] Programmers :: 징검다리 건너기 (0) | 2023.07.15 |