[2110] 공유기 설치, c++

2021. 2. 6. 23:48·DEV/PS

[2110] 공유기 설치

 

https://www.acmicpc.net/problem/2110

 

2110번: 공유기 설치

첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가

www.acmicpc.net

한줄 후기 : 재작년 스터디때 푼 것들

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n,c;
vector<int> v;
bool check(long long x){
	int temp = 1;
	int t=v[0];
	for(int i=0; i<n; i++){
		if(v[i]-t >= x){
			t = v[i];
			temp++;
		}
	}
	if(temp >= c)	return true;
	else	return false;
}
int main(){
	int m;
	scanf("%d %d", &n, &c);
	for(int i=0; i<n; i++){
		scanf("%d", &m);
		v.push_back(m);
	}
	sort(v.begin(), v.end());
	long long mid, l=1, r, ans=0;
	r = v[n-1]-v[0];
	while(l<=r){
		mid = (l+r)/2;
		if(check(mid)){
			l = mid+1;
			if(ans < mid){
				ans = mid;
			}
		}
		else{
			r = mid - 1;
		}
	}
	printf("%lld", ans);
	return 0;
}

이분탐색은 기준 잡기가 너무 어렵다. 공유기 설치도 처음에 기준을 잘못 잡아서 헤맸었음. 공유기 설치는 인접한 공유기 거리를 기준으로 그 거리가 성립할 수 있는지 없는지를 봐야한다. left 는 당연히 1이고, right는 가장 먼 거리, 정렬한 벡터의 [n-1]- [0] 값이다.

여기까지 하면 나머지는 이분탐색으로 돌면서 현재의 mid 값을 만족하는 지 아닌지 check 함수에서 검사 후 만족한다면 거리를 더 키워도 되므로 left = mid +1 만족하지 않는다면 right = mid -1 을 해줘야 한다. 이분 탐색은 너무 어려워.

​

저작자표시 (새창열림)

'DEV > PS' 카테고리의 다른 글

[1018] 체스판 다시 칠하기, c++  (0) 2021.02.06
[2512] 예산, c++  (0) 2021.02.06
[2012] 등수 매기기, c++  (0) 2021.02.06
[17241] Pineapple Advertising, c++  (0) 2021.02.06
[1699] 제곱수의 합, c++  (0) 2021.02.06
'DEV/PS' 카테고리의 다른 글
  • [1018] 체스판 다시 칠하기, c++
  • [2512] 예산, c++
  • [2012] 등수 매기기, c++
  • [17241] Pineapple Advertising, c++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (177)
      • DEV (146)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (20)
        • injection (1)
        • CI CD (0)
        • JS, TS (1)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    리액트
    node.js
    Express
    BFS
    슬랙봇
    Nest.js
    boj
    Nest
    slack
    react
    일상
    DP
    GitHub
    알고리즘
    SOPT
    이분탐색
    aws
    DFS
    앱잼
    typescript
    위상정렬
    우선순위큐
    백준
    PS
    슬랙
    회고
    mongoDB
    렛츠락페스티벌
    솝트
    nodejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
jobchae
[2110] 공유기 설치, c++
상단으로

티스토리툴바