백준 문제풀이

19532 번 : 수학은 비대면강의입니다

하다블 2023. 5. 3. 18:39
반응형

문제는 다음과 같습니다.

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

 

19532번: 수학은 비대면강의입니다

정수 $a$, $b$, $c$, $d$, $e$, $f$가 공백으로 구분되어 차례대로 주어진다. ($-999 \leq a,b,c,d,e,f \leq 999$) 문제에서 언급한 방정식을 만족하는 $\left(x,y\right)$가 유일하게 존재하고, 이 때 $x$와 $y$가 각각 $-

www.acmicpc.net

 

풀이 코드는 다음과 같습니다.

#include <iostream>

using namespace std;


int main()
{
	int a,b,c,d,e,f;
	cin>>a>>b>>c>>d>>e>>f;
	for(int i{-999};i<1000;i++)
	{
		for(int j{-999};j<1000;j++)
		{
			if(a*i+b*j==c&&d*i+e*j==f)
			{
				cout<<i<<"\n"<<j;
				break;
			}
		}
	}
}

처음에는 하나하나 경우를 나누어 보았습니다.

(아래는 처음 생각한 방식이며, 오답이 나온 코드입니다.)

#include <iostream>
#include <vector>
#include <string>
using namespace std;


int main()
{
	int a,b,c,d,e,f;
	int x,y;
	cin>>a>>b>>c>>d>>e>>f;
	if(a<d)
	{
		y=((d/a)*c-f)/((d/a)*b-e);
		x=(c-b*y)/a;	
	}
	else if(a>d)
	{
		y=(c-(a/d)*f)/(b-(a/d)*e);
		x=(c-b*y)/a;
	}
	else if(a==d)
	{
		y=(c-f)/(b-e);
		x=(c-b*y)/a;
	}
	cout<<x<<"\n"<<y;
}

그런데 이 경우로는 정수가 나오지 않을 가능성이 존재합니다. a와 d가 나누어 떨어지지 않는 경우에는 소수가 나오기 때문에 좋지 못한 케이스임을 깨달았고

이번 문제 역시 부르트포스 알고리즘 분야의 문제인 것을 확인하고 모두 찾아보는 단순한 방식을 채택했습니다.

반응형

'백준 문제풀이' 카테고리의 다른 글

2587 번 : 대표값2  (0) 2023.05.04
2839 번 : 설탕 배달  (0) 2023.05.04
2231 번 : 분해합  (0) 2023.05.03
2798 번 : 블랙잭  (0) 2023.05.03
24313 번 : 알고리즘 수업 - 점근적 표기 1  (0) 2023.04.29