[BOJ/c++] 2110 - 공유기 설치

2022. 1. 22. 22:40· Koala - 5기/코딩테스트 준비 스터디
목차
  1. 문제
  2. 풀이
  3. 코드

문제

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

풀이

집의 개수가 최대 20만개이고 집의 좌표가 10억까지 가능하므로 이진탐색으로 풀어야 한다.

1. 공유기 좌표를 정렬

2. 정렬된 공유기 좌표에서 가장큰 좌표와 가장 작은 좌표의 차이가 가능한 최대값

3. st = 1, ed = (가장 큰 집의 좌표 - 가장 작은 집의 좌표)로 두고 이진 탐색을 한다.

4. 첫번 째 집에는 무조건 공유기를 설치해야 하고 모든 집들을 방문하면서 이전에 공유가 설치된 집과의 거리 차이가 mid값보다 크거나 같으면 공유기를 설치한다.

5. 원하는 공유기 수만큼 설치를 못했으면 ed = mid - 1 아니라면 st = mid + 1 (원하는 만큼 설치를 했어도 최대값을 구하기 위해 mid를 증가시킨다)

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

#define ll long long

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, c;
    cin >> n >> c;
    vector<ll> v;
    for (int i = 0; i < n; i++) {
        ll p;
        cin >> p;
        v.push_back(p);
    }
    sort(v.begin(), v.end());
    ll st = 1; ll ed = v[n - 1] - v[0];
    ll ans = 0;
    while (st <= ed) {
        ll mid = (st + ed) / 2;
        int cnt = 1; int prev = 0; ll tmp = 1000000000;
        for (int i = 1; i < n; i++) {
            if (v[i] - v[prev] >= mid) {
                tmp = min(tmp, v[i] - v[prev]);
                prev = i;
                cnt++;
            }
        }
        if (cnt < c) {
            ed = mid - 1;
        } else {
            st = mid + 1;
            ans = max(ans, tmp);
        }
    }
    cout << ans;
    return 0;
}
저작자표시 (새창열림)

'Koala - 5기 > 코딩테스트 준비 스터디' 카테고리의 다른 글

[백준/C++] 이친수  (0) 2022.01.23
[백준/C++] 알고리즘 5582번 공통 부분 문자열  (0) 2022.01.23
[백준/C++] 15624번 피보나치 수 7  (0) 2022.01.22
[BOJ / python] 14430번: 자원 캐기  (0) 2022.01.22
[BOJ / Swift & Python] 17626 - Four Squares  (2) 2022.01.21
  1. 문제
  2. 풀이
  3. 코드
'Koala - 5기/코딩테스트 준비 스터디' 카테고리의 다른 글
  • [백준/C++] 이친수
  • [백준/C++] 알고리즘 5582번 공통 부분 문자열
  • [백준/C++] 15624번 피보나치 수 7
  • [BOJ / python] 14430번: 자원 캐기
KauKoala
KauKoala
항공대 알고리즘 동아리 Koala 🥰
KauKoala
Koala
KauKoala
전체
오늘
어제
  • 분류 전체보기 (1888)
    • 공지 게시판 (10)
    • 정보 게시판 (8)
    • Codeforce (15)
    • acm-icpc (6)
    • Koala - 1기 (16)
    • Koala - 2기 (111)
      • Programming Contest (1)
      • A반 (20)
      • B반 (39)
      • C반 (22)
      • 기초 강의 (18)
    • Koala - 3기 (10)
      • 기초 스터디 (7)
    • Koala - 4기 (67)
    • Koala - 5기 (144)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (68)
    • Koala - 6기 (102)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (25)
      • 모의 테스트 스터디 (1)
    • Koala - 7기 (167)
      • 기초 알고리즘 스터디 (97)
      • 코딩테스트 준비 스터디 (68)
      • 모의 테스트 스터디 (1)
    • Koala - 8기 (44)
      • 기초 알고리즘 스터디 (32)
      • 코딩테스트 준비 스터디 (10)
      • 코드포스 버츄얼 스터디 (0)
      • 프로그래머스 LV2 스터디 (0)
    • Koala - 9기 (205)
      • 기초 알고리즘 스터디 (138)
      • 코딩테스트 준비 스터디 (64)
      • 모의테스트 준비 스터디 (1)
    • Koala - 10기 (117)
      • 기초 알고리즘 스터디 (30)
      • 코딩테스트 준비 스터디 (86)
      • 모의테스트 준비 스터디 (1)
    • Koala - 11기 (151)
      • 기초 알고리즘 스터디 (46)
      • 코딩테스트 준비 스터디 (104)
      • 모의테스트 준비 스터디 (1)
    • Koala - 12기 (86)
      • 기초 알고리즘 스터디 (31)
      • 코딩테스트 준비 스터디 (55)
    • Koala - 13기 (119)
      • 기초 알고리즘 스터디 (52)
      • 코딩테스트 준비 스터디 (67)
    • Koala - 14기 (116)
      • 기초 알고리즘 스터디 (39)
      • 코딩테스트 준비 스터디 (77)
    • Koala - 15기 (138)
      • 기초 알고리즘 스터디 (73)
      • 코딩테스트 준비 스터디 (65)
    • Koala - 16기 (47)
      • 코딩테스트 기초 스터디 (16)
      • 코딩테스트 심화 스터디 (31)
    • Koala - 17기 (62)
      • 코딩테스트 기초 스터디 (15)
      • 코딩테스트 심화 스터디 (47)
    • Koala - 18기 (31)
      • 코딩테스트 기초 스터디 (11)
      • 코딩테스트 심화 스터디 (20)
    • Koala - 19기 (42)
      • 코딩테스트 기초 스터디 (7)
      • 코딩테스트 심화 스터디 (35)
    • Koala - 20기 (0)
      • 코딩테스트 기초 스터디 (0)
      • 코딩테스트 심화 스터디 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 🐨항공대 알고리즘 학회 Koala 3기 모집
  • 🐨항공대 알고리즘 학회 Koala 2기 모집
  • 소모임 소개

인기 글

태그

  • dp
  • 백준
  • dfs
  • 파이썬
  • 백트래킹
  • C++
  • BFS
  • BOJ

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
KauKoala
[BOJ/c++] 2110 - 공유기 설치
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.