728x90
처음 든 생각
- 연립 방정식을 해결했던 과정을 하나씩 복기해보자
1. x또는 y의 계수를 최소공배수로 맞춰준다
2. 두 개의 식을 빼서 x 또는 y를 구한다
3. 구한 하나의 변수를 기준으로 계산하여 나머지 변수의 값을 찾는다.
- 최소공배수는 (두 수의 곱) / (두 수의 최대 공약수) 로 구할 수 있다. math.gcd를 사용하자.
나의 답
import sys, math
input= sys.stdin.readline
a,b,c,d,e,f = map(int,input().split())
if a == 0:
y = c // b
x = (f-e*y) // d
print(x,y,sep=' ')
elif d == 0:
y = f // e
x = (c-b*y) // a
print(x,y,sep=' ')
elif b== 0:
x = c // a
y = (f-d*x) // e
print(x,y,sep=' ')
elif e==0:
x = f // d
y = (c-a*x) // b
print(x,y,sep=' ')
else:
x_lcm = a*d // math.gcd(a,d)
y_lcm = b*e // math.gcd(b,e)
times_1 = x_lcm // a
times_2 = x_lcm // d
b *= times_1
c *= times_1
e *= times_2
f *= times_2
y = (c-f) // (b-e)
x = (c-b*y) // x_lcm
print(x,y,sep=' ')
먼저 앞선 4개의 경우 a,b,d,e가 0일 때를 예외로 처리해준 것이다. 이 상황에서는 바로 x 또는 y를 찾을 수 있기 때문에 바로 값을 찾은 후 나머지 문자에 대한 연산만 수행해주면 끝이다.
이게 아니라면 이제 위에서 살펴본 연립방정식의 과정을 따라가면 된다.
사칙연산 과정을 파이썬 코드로 구현한 것이기에 따로 설명은 안해도 될 것 같다.
처음에 이 문제를 풀었을 때 계수가 0인 것에 대한 예외를 떠올리지 못했다.
수학 문제 풀 때 0이라는 특이 상황이 있다는 것을 한 번 더 마음에 새기고 가자.
또한 최대공약수를 구하는 알고리즘을 따로 구현해서 사용할 수 있겠지만
math 라이브러리 안에 gcd 메소드가 내장되어있다는 것도 까먹지 말자.
최대공배수를 구하는 lcm 메소드도 있다는데
파이썬 버전 3.9 이상에서만 지원한다고 하여 코테에 사용하기에는 조금 리스크가 있을 것 같다.
728x90
'스터디 > 코딩테스트' 카테고리의 다른 글
백준 2839 - 설탕 배달 (1) | 2024.01.31 |
---|---|
백준 1018 - 체스판 다시 칠하기 (0) | 2024.01.31 |
백준 14889 - 스타트와 링크 (2) | 2024.01.29 |
백준 14888 - 연산자 끼워넣기 (2) | 2024.01.28 |
백준 1629 - 곱셈 (2) | 2024.01.25 |