[백준 14697] 방 배정하기 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
방 정원 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;
}