[BAEKJOON ONLINE JUDGE 16283번] Farm

Farm in C++

문제

  • 양이 x마리, 염소가 y마리 있고, 양은 하루에 a만큼의 사료를, 염소는 하루에 b만큼의 사료를 먹을 때, 모든 양과 염소가 하루에 먹은 사료의 양 w와 전체 양과 염소의 수 n을 통해 양과 염소의 수를 구하는 문제이다.
  • 유일 해가 존재할 때는 그 해를 출력하며, 해가 2개 이상이거나 해가 없으면 -1을 출력해야한다.

입력 데이터

  • 네 정수 a, b, n, w
  • 입력 예
3 4 9 32

출력 데이터

  • 문장의 단어의 개수
  • 출력 예
4 5

조건

  • 1 ≤ a ≤ 1,000, 1 ≤ b ≤ 1,000, 2 ≤ n ≤ 1,000, 2 ≤ w ≤ 1,000,000

해결 방법

  • 일반적인 연립방정식 문제인 x+y=n, ax+by=w와 같다.
  • 따라서 컴퓨터의 계산 능력을 믿고 연립 방정식을 푸는 것을 이용하면 된다.

코드

#include <iostream>
using namespace std;

int main()
{
    int sheepNum; // 양의 수
    int gottNum; // 염소의 수
    int a; // 양 한 마리가 먹는 사료의 양
    int b; // 염소 한 마리가 먹는 사료의 양
    int n; // 양과 염소의 총 수
    int w; // 양과 염소가 하루 동안 소비한 전체 사료의 양
    int solutionNum = 0; // 해의 수

    cin >> a >> b >> n >> w;

    for(int sN=1, gN=n-1; sN<=n-1; sN++, gN--) // sN = loop에서 사용할 양의 수, gN = loop에서 사용할 염소의 수
    { // 양 1마리, 염소 n-1마리 부터 시작
        if(solutionNum < 2) // 해가 2개 이상인 경우 구하는 의미가 없기 때문에 loop를 빠져나오기 위함
        {
            if((sN*a+gN*b) == w) // 양들이 먹은 사료의 양 + 염소들이 먹은 사료의 양 == 하루 동안 소비한 전체 사료의 양
            {
                sheepNum = sN;
                gottNum = gN;
                solutionNum++; // 해의 수 증가
            }
        }
        else
        {
            break;
        }
    }

    if(solutionNum == 1) // 유일해가 존재할 때
    {
        cout << sheepNum << " " << gottNum << endl;
    }
    else // 해가 없거나, 2개 이상일 때
    {
        cout << -1 << endl;
    }

    return 0;
}

문제 원본 링크

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

0%