본문 바로가기
Algorithm(C++)/시뮬레이션

[BOJ - 23351] 물 주기(C++)

by alswns8081 2025. 2. 4.

   문제

 

   접근 방법

 A는 N의 약수이므로, 물을 줄 때 N/A의 몫 만큼씩 물을 계속해서 줄 때, 살아 있는 기간이 최대.

배열의 크기를 N/A로 설정한 후 1, 2, 3의 과정을 반복하며 특정 index의 값이 0보다 작은 경우 반복을 종료

(예외 처리) 만약 음수인 경우, 해당 날짜만큼 더 진행된 것이므로 날짜 + arr[idx] 값을 더해줌

 

   코드

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N, K, A, B;
    // N 개의 화분, K 만큼의 수분, 연속된 A 개의 화분, B 의 수분 추가
    cin >> N >> K >> A >> B;

    int size = N/A;

    vector<int> arr(size, K);

    int count = 0;

    int i = 0;
    while (arr[i] > 0) {
        arr[i] += B;
        for (int j =0; j < size; j++) arr[j]--;

        i = (i + 1) % size;
        count++;
    }

    if (arr[i] < 0) count += arr[i];

    cout << count;

    return 0;
}

 

 

 

  링크

23351번: 물 주기