백준 17245번 서버실

김두현·2023년 1월 29일
1

백준

목록 보기
84/133
post-thumbnail

🔒[문제 url]

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


🪄전체 코드

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

typedef long long ll;
ll n;
ll server[1001][1001];
ll Max = -1;//이분탐색 경계값
ll total;

void INPUT()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            cin >> server[i][j],
            Max = max(Max,server[i][j]),
            total += server[i][j];
}


void SOLVE()
{

    ll left = 0,right = Max;

    ll ans;
    while(left <= right)
    {
        //mid분만큼 지났을 때
        ll mid = (left + right) / 2;

        //각 지점 컴퓨터의 높이가 mid보다 낮다면 server[i][j]만큼 , mid이상 이라면 mid만큼 작동한다.
        ll cnt = 0;//작동하는 컴퓨터의 수
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++)
                cnt += min(server[i][j],mid);

        //작동하는 컴퓨터의 수가 절반 이상이라면, mid를 줄여본다.
        if(2*cnt >= total) ans = mid , right = mid - 1;
        //절반 미만으로 작동한다면, mid를 키운다.
        else left = mid + 1;
    }

    cout << ans;
}

int main()
{
    INPUT();
    SOLVE();
}

🥇문제 후기

GOLD5 미만 난이도는 알고리즘 및 풀이 설명을 주석으로 대체합니다.
주석을 참고해주세요.


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM

0개의 댓글