작성일 :

문제 링크

14697번 - 방 배정하기

설명

방 정원 A, B, C가 주어질 때, 이 방들을 원하는 개수만큼 사용해 빈 침대 없이 정확히 N명을 배정할 수 있는지 묻습니다. 세 종류 중 일부만 써도 됩니다.


접근법

N이 300 이하이므로 완전탐색으로 충분합니다.

각 방 종류를 몇 개씩 사용할지 삼중 반복문으로 모든 조합을 시도합니다. 세 방의 인원 합이 정확히 N이 되는 조합이 하나라도 있으면 1을, 없으면 0을 출력합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;

class Program {
  static void Main() {
    var parts = Console.ReadLine()!.Split();
    var a = int.Parse(parts[0]);
    var b = int.Parse(parts[1]);
    var c = int.Parse(parts[2]);
    var n = int.Parse(parts[3]);

    for (var i = 0; i <= n; i++) {
      for (var j = 0; j <= n; j++) {
        for (var k = 0; k <= n; k++) {
          if (a * i + b * j + c * k == n) {
            Console.WriteLine(1);
            return;
          }
        }
      }
    }

    Console.WriteLine(0);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

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

  int a, b, c, n; cin >> a >> b >> c >> n;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      for (int k = 0; k <= n; k++) {
        if (a * i + b * j + c * k == n) {
          cout << 1 << "\n";
          return 0;
        }
      }
    }
  }

  cout << 0 << "\n";

  return 0;
}