๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/43236
ํ์ด
์ด๋ถ ํ์์ผ๋ก ํ ์์ด๋์ด๊ฐ ๋์ ํ ์ ๋ ์ฌ๋ผ์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ์กฐํด์ ํ์๋ค. (hyeon930๋ ํ์ด)
์ด๋ถํ์์ผ๋ก ๋ฐ์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ถ ํ์์ ์ด์ฉํด ๊ฐ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ต๋๊ฐ์ ๊ตฌํด์ผ ๋๋ ๋ฌธ์ ์๋ค. ๋ฌธ์ ๋ฅผ ๋ค์ ์๊ฐํด๋ณด๋ฉด, "๊ฐ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ด x๊ฐ ๋ ์ ์๋๊ฐ?"๋ฅผ ๋ง์กฑํ๋ x๋ค ์ค์ ์ต๋๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ด x๋ฅผ ์ด๋ถํ์์ผ๋ก ๋ฒ์๋ฅผ ์ขํ๊ฐ๋ฉฐ ๊ตฌํ๋ฉด ๋๋ค.
์ด๋ถ ํ์์ ์ํด, left = 0, right = distance๋ก ์ด๊ธฐ๊ฐ์ ์ก๊ณ rocks๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ(์ด๋ถ ํ์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ์ ์ ๋ก ํ๋ฏ๋ก)ํ๋ค.
์ดํ (left <= right) ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋์ ๋ค์์ ๋ฐ๋ณตํ๋ค.
- mid(๊ฑฐ๋ฆฌ์ ์ต์๊ฐ x), prev(์ด์ ๋ฐ์์ ์์น), cnt(์ ๊ฑฐํ ๋ฐ์์ ๊ฐ์) ์ด๊ธฐ๊ฐ ์ค์
- ๋ชจ๋ ๋ฐ์์ ๋ํด
1) rocks[i] - prev < mid ์ผ ๊ฒฝ์ฐ
์ด์ ๋ฐ์์์ ๊ฑฐ๋ฆฌ๊ฐ mid๋ณด๋ค ์์ผ๋ฏ๋ก ํ์ฌ ๋ฐ์๋ฅผ ์ ๊ฑฐํด์ผ ํจ
2) rocks[i] - prev >= mid ์ผ ๊ฒฝ์ฐ
๋ฐ์๋ฅผ ์ ๊ฑฐํ ํ์๊ฐ ์์ผ๋ฏ๋ก, ํ์ฌ ๋ฐ์๊ฐ ๋ค์ ๋ฐ์์ prev๊ฐ ๋จ - ๋ง์ง๋ง ๋ฐ์์ ๋์ฐฉ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ์ ๋ํด์๋ mid์ ๋น๊ต
- 1) cnt๊ฐ n๋ณด๋ค ์์ผ๋ฉด ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ด mid๊ฐ ๋ ์ ์์ผ๋ฏ๋ก, ๋ค์ mid ๊ฐ์ ํ์ฌ๋ณด๋ค ํฌ๊ฒ ์ค์ ํด์ผ ํ๋ค.
2) ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ mid ๊ฐ์ ์ค์ฌ์ ์ต๋๊ฐ x๋ฅผ ์ฐพ๋๋ค.
์์ค์ฝ๋
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
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int distance, vector<int> rocks, int n) {
int answer = 0;
int left = 0, right = distance;
sort(rocks.begin(), rocks.end());
while(left <= right) {
int mid = (left + right) / 2;
int prev = 0, cnt = 0;
for(int i = 0; i < rocks.size(); i++) {
if(rocks[i] - prev < mid) // rocks[i]๋ฅผ ์ ๊ฑฐํด์ผ ํจ
cnt++;
else
prev = rocks[i];
}
if(distance - prev < mid) // ๋ง์ง๋ง ๋ฐ์์ ๋์ฐฉ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ ์ฒดํฌ
cnt++;
if(cnt <= n) { // ๋ฐ์ ์ฌ์ด ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ mid๋ก ํ ์ ์์ ๊ฒฝ์ฐ
answer = max(mid, answer);
left = mid + 1;
}
else{
right = mid - 1;
}
}
return answer;
}
|
cs |
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ๋คํธ์ํฌ (0) | 2021.03.31 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / Python] ํ๊ฒ ๋๋ฒ (0) | 2021.03.15 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ๋จ์์นด๋ฉ๋ผ (0) | 2021.02.01 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2021.01.26 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ๋ฒ ์คํธ์จ๋ฒ (0) | 2021.01.25 |