[19532] 수학은 비대면강의입니다
2023. 7. 20. 22:14ㆍ코딩테스트/백준
[문제]
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
[풀이]
아래 코드는 아주 지저분하다. 따라서 코드를 보고 이해하지 말고 밑 한국어 글을 보고 이해하길 바란다.
[함수]
gcd : 최대공약수를 구하는 함수 (최소공배수를 구하는 데 필요)
lcm : 최소공배수를 구하는 함수 (식 간 뺄셈을 할 때 a와 d를 동일하게 맞춰줄건데(ax+by=c,dx+ey=f) 이때의 동일한 수는 최소공배수가 되어야 하기 때문)
[경우의 수]
cf) ax+by=c | dx+ey=f
1. a!=0 && b!=0 && d!=0 && e!=0
-> 일반적인 계산 (a와 d를 최소공배수로 동일하게 만들기 위해 각 식에 알맞은 숫자를 곱한 후 뺄셈을 통해 계산)
2. a==0 && e==0
-> -2y=6, 3x=9 처럼 바로 정답이 나올 수 있는 계산
3. b==0 && d==0
-> 3x=9, -2y=6 처럼 바로 정답이 나올 수 있는 계산
4. a==0
->윗줄 식은 바로 정답이 나오지만, 아랫줄 식은 그렇지 않은 계산
5. b==0
->윗줄 식은 바로 정답이 나오지만, 아랫줄 식은 그렇지 않은 계산
6. d==0
->아랫줄 식은 바로 정답이 나오지만, 윗줄 식은 그렇지 않은 계산
7. e==0
->아랫줄 식은 바로 정답이 나오지만, 윗줄 식은 그렇지 않은 계산
[코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//ax+by=c
//dx+ey=f
int gcd(int p, int q) { // 최대공약수
if (q == 0)
return p;
else
return gcd(q, p % q);
}
int lcm(int p, int q) { //최소공배수
return p * q / gcd(p, q);
}
int main(void)
{
int a, b, c, d, e, f;
int fir = 0;
scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);
if(a!=0&&b!=0&&d!=0&&e!=0)
{
fir = lcm(a, d);
int ka = fir / a;
int kd = fir / d;
a *= ka;
b *= ka;
c *= ka;
d *= kd;
e *= kd;
f *= kd;
int k, z;
if (b > e) {
k = b - e;
z = c - f;
}
else {
k = e - b;
z = f - c;
}
int y = z / k;
int x;
x = (c - b * y) / a; //ax+by=c
printf("%d %d", x, y);
}
else if (a == 0&&e==0) {
int y = c / b;
int x = f / d;
printf("%d %d", x, y);
}
else if (b == 0 && d == 0) {
int x = c / a;
int y = f / e;
printf("%d %d", x, y);
}
else if (a==0) {
int y = c / b;
int x = (f - e * y) / d;
printf("%d %d", x, y);
}
else if (d == 0) {
int y = f / e;
int x = (c - b * y) / a;
printf("%d %d", x, y);
}
else if (b == 0) {
int x = c / a;
int y = (f - d * x) / e;
printf("%d %d", x, y);
}
else if (e == 0) {
int x = f / d;
int y = (c - a * x) / b;
printf("%d %d", x, y);
}
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 10866] 덱 C언어 (1) | 2024.01.23 |
---|---|
[백준] 1018. 체스판 다시 칠하기 (0) | 2023.07.24 |
[백준] 24262. 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2023.07.19 |
[백준]5622. 다이얼 (0) | 2023.07.19 |
[백준] 11005. 진법 변환2 (0) | 2023.07.19 |