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
- baekjoon
- 줄 세우기
- algorithm
- 티스토리챌린지
- 프로그래머스
- const
- RootMotion
- winapi
- C++
- DirectX11
- UnrealEngine4
- GeeksForGeeks
- 언리얼엔진5
- 오블완
- RVO
- Programmers
- C
- 팰린드롬 만들기
- IFileDialog
- UE5
- directx
- 백준
- DeferredRendering
- 2294
- NRVO
- Frustum
- Unreal Engine5
- UnrealEngine5
- 1563
- softeer
Archives
- Today
- Total
Game Develop
[Algorithm] Baekjoon 13397번 : 구간 나누기 2 본문
https://www.acmicpc.net/problem/13397
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
int n, m;
int arr[5000] = { 0 };
bool check(int mid)
{
int minNum = 0x3f3f3f3f;
int maxNum = 0;
int count = 1;
for (int i = 0; i < n; ++i)
{
minNum = min(minNum, arr[i]);
maxNum = max(maxNum, arr[i]);
if (maxNum - minNum > mid)
{
++count;
minNum = arr[i];
maxNum = arr[i];
}
}
return count <= m;
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 0; i < n; ++i)
{
cin >> arr[i];
}
int right = 10001;
int left = 0;
int answer = 0x3f3f3f3f;
while (left <= right)
{
int mid = (left + right) / 2;
if (check(mid))
{
answer = min(answer, mid);
right = mid - 1;
}
else
{
left = mid + 1;
}
}
cout << answer;
}
|
cs |
완전탐색문제인줄 알았는데, 시간복잡도가 심상치않아서 어떻게 풀어야할지 고민하다가 풀이법을 참고했다.
이분탐색..이였는데 사실 관련문제를 안푼지 오래되서 그런가 전혀 연관시키지 못했다.
정답률이 굉장히 높길래 엄청 쉽게 생각해서 그런가...
mid값을 문제의 정답으로 기준삼고, 실제로 배열에서 m개이하의 구간으로 mid값을 만들 수 있는지 검사한다.
배열 처음부터 최소값,최대값을 업데이트하면서 만약 최대값-최소값이 mid를 넘어서는 순간, 새로운 구간을 만들어서 넘긴다. 반드시 mid값을 만들기 위해서 발악을 한다고 생각하면 된다.
새로운 구간을 추가하다가 m개를 초과할 경우 바로 false를 리턴한다. 즉 절대로 m개이하의 구간으로 mid값을 못만든다고 판단이 되는것이다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm] Baekjoon 14499번 : 주사위 굴리기 (0) | 2023.09.26 |
---|---|
[Algorithm] Baekjoon 15684번 : 사다리 조작 (0) | 2023.09.26 |
[Algorithm] Baekjoon 1025번 : 제곱수 찾기 (0) | 2023.09.23 |
[Algorithm] Baekjoon 9079번 : 동전 게임 (0) | 2023.09.22 |
[Algorithm] Baekjoon 1039번 : 교환 (0) | 2023.09.22 |