✨컴공주✨ [1052682] · MS 2021 (수정됨) · 쪽지

2024-12-28 02:18:21
조회수 353

컴공 일기260

게시글 주소: https://games.orbi.kr/00070877031


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



백준 6236번 (S1) 솔루션 by c++


생각보다 이분 탐색 로직은 쉬운 듯 한데, 디테일에서 에러를 많이 냈던 문제입니다.

특히 high의 범위가 금액의 MAX가 아닌 금액들의 총합으로 잡아야 한다는 게…


생각없이 코딩했을 때 놓칠 수 있는 부분이랄까요…



#include <iostream>

using namespace std;

int day_money[100002];

int N, M; //N: 일 수, M: 인출 횟수

int main()

{

    ios::sync_with_stdio(false);

    cin.tie(NULL);

    cout.tie(NULL);

    cin >> N >> M;


     int sum = 0;

     for(int i=0; i<N; i++)

    {

        cin >> day_money[i];

        sum += day_money[i];

    }

    


    int low = 1;

    int high = sum;


    while(low<=high)

    {

        int mid = (low + high) / 2;

        int cnt = 1;

        bool flag = true;


        int current = mid;


        for(int i=0; i<N; i++)

        {

            if(day_money[i] > mid)

            {

                flag = false;

                break;

            }

            if(current < money[i])

            {

                current = mid;

                cnt++;

            }

            current -= moeny[i];

        }

        if(flag == false || cnt > M)

        {

            low = mid + 1;

        }

        else

        {

             result = mid;

             high = mid - 1;

        }

    }


   cout << result << endl;

}

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.