๋ฌธ์ ๋งํฌ
https://programmers.co.kr/learn/courses/30/lessons/43236
๋ฐ์๋ฅผ n๊ฐ ์ ๊ฑฐํ์ ๋, ๊ฐ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ด ์ต๋๊ฐ ๋๋๋ก ๋ฐ์๋ฅผ ์ ๊ฑฐํ๋ ๋ฌธ์ .
ํ์ด
- ํ์ด ์๊ณ ๋ฆฌ์ฆ
๊ฐ ์ง์ ๋ค ์ฌ์ด์ ๋ฒ์ด์ ธ์ผํ ์ต์ ๊ฐ๊ฒฉ์ "์ด๋ถํ์"์ ํตํด์ ํ์ํ๋ค.
๋ฒ์ด์ ์ผํ ๊ฐ๊ฒฉ์ ๋ฒ์๋ 0 ~ distance ์ด๋ด ์ผ ๊ฒ์ด๋ค.
L = 0, R = distance๋ก ์ก๊ณ mid ๊ฐ์ ์ง์ ๋ค ์ฌ์ด ๋ฒ์ด์ ธ์ผํ ์ต์ ๊ฐ๊ฒฉ์ด๋ผ๊ณ ์๊ฐํ๋ค.
1. ๋จผ์ , ๊ฐ ์ง์ ๋ค์ ์์น๊ฐ ๋ถ๊ท์นํ๊ฒ ์ฃผ์ด์ง๋ฏ๋ก sort ํจ์๋ฅผ ํตํด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํด์ค๋ค.
2. ๊ฐ ์ง์ ์ฌ์ด๊ฐ ์ต์ mid ๋งํผ ๋ฒ์ด์ง๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ ์ง์ ์ ์ง์์ผํ๋ ์ง ์ผ๋ค.
๋ฒ์ด์ ธ์ผํ๋ ์ต์ ๊ฐ๊ฒฉ์ด ์ปค์ง์๋ก ์ง์์ผํ ๋ฐ์๊ฐ ๋ง์์ง ๊ฒ์ด๋ค.
=> ๊ทธ๋์ผ ๊ฐ๊ฒฉ์ด ๋ฒ์ด์ง๋๊น
๋ง์ฝ ์ง์์ผํ ๋ฐ์์ ์๊ฐ n๊ฐ๋ณด๋ค ๋ง๋ค?? => ๋๋ฌด ๋ง์ด ์ง์์ผํ๋ฏ๋ก ๊ฐ๊ฒฉ์ ์ขํ์ผํ๋ค.
์ด๋๋ R = mid - 1๋ก ์ค์ ํด์ mid ๊ฐ์ด ์์์ง ์ ์๋๋ก ์ ๋ํ๋ค.
๋ฐ๋๋ก ์ง์์ผํ ๋ฐ์์ ์๊ฐ n๊ฐ๋ณด๋ค ์ ๊ฑฐ๋ ๊ฐ๋ค?? => ์ด๋์ ๊ฐ๊ฒฉ์ ์ ํจํ ๊ฐ์ด๊ณ ๊ฐ๊ฒฉ์ ๋ ๋ฒ๋ ค๋ด๋ ๋๋ค.
์ด๋๋ L = mid + 1๋ก ์ค์ ํด์ mid ๊ฐ์ด ์ปค์ง ์ ์๋๋ก ์ ๋ํ๋ค.
์ ํจํ ๊ฐ๊ฒฉ๋ค ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ ๋ฌธ์ .
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int binary_search(int distance, vector<int> rocks, int n){
int L = 0;
int R = distance - 1;
int ret = 1;
while(L <= R){
int now = 0;
int mid = (L+R)/2; // ๋ฐ์ ์ฌ์ด ์ต์ mid ๋งํผ ๊ฐ๊ฒฉ์ด ๋ฒ์ด์ ธ์ผํจ
int cnt = 0;
for(int i = 0; i<rocks.size(); i++){
if(rocks[i] - now >= mid){
cnt++;
now = rocks[i];
}
}
//rocks.size() - cnt ๊ฐ๋ฅผ ์ง์์ผ mid ๊ฐ๊ฒฉ ์ ์ง๊ฐ๋ฅ
if(rocks.size() - cnt <= n){
L = mid + 1; //๊ฐ๊ฒฉ์ ๋ ๋ฒ๋ ค๋ด๋ ๋จ
ret = max(ret, mid);
}
else if(rocks.size() - cnt > n) // ๋ ๋ง์ด ์ง์์ผํจ => ๊ฐ๊ฒฉ์ ์ขํ์ผํจ
R = mid - 1;
}
return ret;
}
int solution(int distance, vector<int> rocks, int n) {
int answer = 0;
sort(rocks.begin(), rocks.end());
answer = binary_search(distance, rocks, n);
return answer;
}
|
cs |
'ํ๋ก๊ทธ๋๋จธ์ค > 4๋จ๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv4] : ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ (0) | 2022.07.13 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv4] : ๊ฐ์ฌ ๊ฒ์ (0) | 2022.07.12 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv4] : ๋จ์ด ํผ์ฆ (0) | 2022.07.11 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv4] : ์งํ ์ด๋ (0) | 2022.07.11 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv4] : ๋๋์ง (0) | 2022.06.29 |