[백준/C++]#1654 - 랜선 자르기

2022. 8. 15. 23:25·dev/코딩테스트(백준)

풀이

#include <bits/stdc++.h>
#define ll long long

using namespace std;

// 이미 가지고 있는 랜선
ll L[10001];

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int K,N;
    cin >> K >> N;
    // 가지고 있는 랜선 중 가장 큰 것 (모든 경우 고려하기 위해)
    ll maxi = INT_MIN;
    for (int i=0; i<K; i++) {
        cin >> L[i];
        maxi = max(maxi, L[i]);
    }
    ll st=1;
    ll en=maxi;
    ll ans;

    // 이진탐색
    while (st <= en) {
        ll mid = (st+en)/2;
        ll cnt=0;
        cout << st << ' ' << mid << ' ' << en << '\n';
        // 모든 랜선에 대해 만들 수 있는 개수합
        for (int i=0; i<K; i++) {
            cnt += L[i]/mid;
        }
        if (cnt >= N) {
            st = mid+1;
            ans = mid;
        }
        else en = mid-1;
    }
    cout << ans;
    return 0;
}

풀이

예제에 대한 전개도

이진탐색은 st와 en을 정하고, mid로 절반씩 나누며 O(logN)에 정렬된 수를 탐색하는 알고리즘이다.

 

  1. 탐색할 위치를 정한다. (모든 경우 고려하기 위해, 가장 큰 랜선의 길이로)
  2. mid 기준으로 언제 앞쪽, 뒤쪽을 탐색할지 조건을 정한다. (모든 랜선에 대해 각각 mid 나눈 값의 총합)
  3. 탐색한다.

 


+a

  • 부등호 및 크거나 같다, 언제 ans를 업데이트 할지.. → 시행착오로 찾아내야함
  • long long을 쓴 이유
    • st, en ≤ INT_MAX 인데 (st+en)/2 의 연산 존재하므로 int overflow가 발생한다.

'dev > 코딩테스트(백준)' 카테고리의 다른 글

[백준/C++]#1174, 1038- 줄어드는 수, 감소하는 수  (0) 2022.08.21
[백준/C++]#13910, 13902- 개업, 개업2  (0) 2022.08.18
[백준/C++]#1967 - 트리의 지름  (0) 2021.02.19
[백준/C++]#1167 - 트리의 지름  (0) 2021.02.18
[백준/C++]#11725 - 트리의 부모 찾기  (0) 2021.02.17
'dev/코딩테스트(백준)' 카테고리의 다른 글
  • [백준/C++]#1174, 1038- 줄어드는 수, 감소하는 수
  • [백준/C++]#13910, 13902- 개업, 개업2
  • [백준/C++]#1967 - 트리의 지름
  • [백준/C++]#1167 - 트리의 지름
dev_dev
dev_dev
C++, Python, ML, Vue
  • dev_dev
    develop about develop
    dev_dev
  • 전체
    오늘
    어제
    • 카테고리 (148) N
      • dev (147) N
        • C++ (44)
        • ML DL (1)
        • on-device AI (8) N
        • AIOT (9)
        • IOT (1)
        • 코딩테스트(백준) (49)
        • 코딩테스트(프로그래머스) (25)
        • 전자공학 (7)
        • 창업 (1)
        • 웹 (1)
        • 자격증 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Template
    인공지능
    uniform initialization
    데이터 분석
    경사하강법
    auto
    COLAB
    머신러닝
    decltype
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dev_dev
[백준/C++]#1654 - 랜선 자르기
상단으로

티스토리툴바