PS

백준 14697번 방 배정하기 c++

상세 2021. 5. 19. 23:31

나의 메모

배정된 모든 방에 빈 침대가 없도록
-> 방의 정원을 모두 꽉 채울것
3개의 침대수가 주어지는데 방 3개 모두 사용할 필요 X

필요한 변수
방의 정원 : A,B,C
전체 학생 수 : N

경우
A방으로 죄다 배정하기 
if(N % A == 0)
printf("1");
A방으로 죄다 배정하기
B방으로 죄다 배정하기
C방으로 죄다 배정하기
A,B방으로 죄다 배정
A,C방으로 죄다 배정
B,C방으로 죄다 배정
A,B,C방으로 죄다 배정

---------------------------------------------------------

일단 브루트 포스는 이름부터 완전 탐색이니까 방을 배정하는

모든 경우의 수를 생각해보니 이렇게 7개 나왔다. 그래서

A,B,C 1개의 방만으로 배정하는 경우는 각 for문 처음에 구현했고

나머지 경우는 C를 사용하지 않는 A,B방 조합만 1번 구현하고

나머지 C가 모두 들어가는 3가지 경우는 if문으로 구현했다.

 

1트만에 맞춰서 기분이 너무 좋다. 나도 노력하면 풀수 있다는 걸 꼭 명심하자.

---------------------------------------------------------

#include<iostream>

int main()
{
int a,b,c,n = 0; // 필요한 변수들 선언 
bool isFind = false; // for문을 빠져나갈 때 사 

std::cin >> a >> b >> c >> n; // 변수 입력받 

for(int i=1; i<=n; i++) // a에 대한 for  
{
if(n % a == 0) // 방 a 만으로도 모든 학생들을 수용 가능하면 즉시 종료하고 1 출력 
{
isFind = true;
std::cout << "1";
break;
}

for(int j=1; j<=n; j++) // b에 대한 for 
{
if(n % b == 0) //  방 b 만으로도 모든 학생들을 수용 가능하면 즉시 종료하고 1 출력 
{
isFind = true;
std::cout << "1";
break;
}

if( (a * i) + (b * j) == n) // 현재 i값 과 a방의 침대수를 곱한 값 + j와  b방의 침대수를 곱한 값이 n(전체 학생수)면 프로그램 종 
{
isFind = true;
std::cout << "1";
break;
}


for(int k = 1; k <= n; k++)
{
if(n % c == 0)
{
isFind = true;
std::cout << "1";
break;
}

if((a * i) + (c * k) == n || (b * j) + (c * k) == n || (a * i) + (b * j) + (c * k) == n)
{
isFind = true;
std::cout << "1";
break;
}
}

if(isFind == true)
{
break;
}
}
if(isFind == true)
{
break;
}
}

if(isFind == false)
{
std::cout << "0";
}

return 0;
}

 

 

 

'PS' 카테고리의 다른 글

PS공부시 나와의 약속  (0) 2021.05.05
프롤로그_PS  (0) 2021.02.16