BOJ 2110 : 공유기 설치 - C++
공유기 설치
이분탐색
문제에 적응중
코드
#include <cstdio>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <algorithm>
#define ll long long
using namespace std;
// 10^9 = 10억
int N, C, ans;
vector<int> v;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> C;
for(int i=0;i<N;i++)
{
int a;
cin >> a;
v.push_back(a);
}
sort(v.begin(), v.end());
/* left초기값이 0이면 mid가 0일경우가 나오기때문에 1로 초기화하자 */
int left = 1;
int right = v.back();
int ans=0;
while(left <= right)
{
int cnt = 1;
int mid = (left + right) / 2;
int start = v[0];
/* 간격이 mid일 때 공유기를 몇개 심을 수 있는지 카운트 */
for(int i=1;i<v.size();i++)
if(v[i] - start >= mid) {
start = v[i];
cnt++;
}
/* 공유기의 거리를 최대로 하는 방향에 = 등호를 붙여서 답을 기억 */
if(cnt >= C){
left = mid + 1;
ans=mid;
}
else right = mid - 1;
}
cout << ans;
return 0;
}
- 로직
집 사이간 간격
에 따라 심을 수 있는 공유기 수
를 구하고 우리가 세우려는 C개
보다 크거나 같을 때
간격을 늘리면서 결국 C개의 공유기
를 심을 수 있는 최대 거리
를 구한다
이분탐색
구현시 주의
답을 기억
하는 =(등호)
가 붙는 방향
은 앞으로 답이 될 수 있는 가능성이 있는 쪽
에 붙여주어야 한다
left
의 초기값
을 0
으로 하면 나누는 값
인 mid
가 0
이될 수 있으니 1
로 초기화하자
Author And Source
이 문제에 관하여(BOJ 2110 : 공유기 설치 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-2110-공유기-설치-C
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이분탐색
문제에 적응중
#include <cstdio> #include <vector> #include <queue> #include <iostream> #include <cmath> #include <algorithm> #define ll long long using namespace std; // 10^9 = 10억 int N, C, ans; vector<int> v; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> C; for(int i=0;i<N;i++) { int a; cin >> a; v.push_back(a); } sort(v.begin(), v.end()); /* left초기값이 0이면 mid가 0일경우가 나오기때문에 1로 초기화하자 */ int left = 1; int right = v.back(); int ans=0; while(left <= right) { int cnt = 1; int mid = (left + right) / 2; int start = v[0]; /* 간격이 mid일 때 공유기를 몇개 심을 수 있는지 카운트 */ for(int i=1;i<v.size();i++) if(v[i] - start >= mid) { start = v[i]; cnt++; } /* 공유기의 거리를 최대로 하는 방향에 = 등호를 붙여서 답을 기억 */ if(cnt >= C){ left = mid + 1; ans=mid; } else right = mid - 1; } cout << ans; return 0; }
- 로직
집 사이간 간격
에 따라심을 수 있는 공유기 수
를 구하고우리가 세우려는 C개
보다크거나 같을 때
간격을 늘리면서결국 C개의 공유기
를 심을 수 있는최대 거리
를 구한다
이분탐색
구현시 주의
답을 기억
하는=(등호)
가붙는 방향
은앞으로 답이 될 수 있는 가능성이 있는 쪽
에 붙여주어야 한다left
의초기값
을0
으로 하면나누는 값
인mid
가0
이될 수 있으니1
로 초기화하자
Author And Source
이 문제에 관하여(BOJ 2110 : 공유기 설치 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-2110-공유기-설치-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)