코딩 테스트/백준
[Python] 백준 19532 수학은 비대면강의입니다
위시리
2024. 12. 31. 17:10
문제 분석
- 연립 방정식 문제 해결
- 답은 -999에서 999 사이
코드 설계
- 연립 방정식 계산 방식 고민
- 입력한 차례대로 index가 0 1 2 3 4 5 라고 했을 때
- x의 계수 맞추기
- '0' 을 '3', '4', '5' 에 곱
- '3' 을 '0', '1', '2'에 곱
- y값 구하기
- y = ( '2' - '5' ) // ( '1' - '4' )
- x값 구하기
- '2' - ( '1' * y ) // '0'
정답 코드
1차 코드 - 런타임 에러..
import sys
input = sys.stdin.readline
num = list(map(int, input().split()))
a = num[0]
d = num[3]
for i in range(len(num)):
if i < 3 :
num[i] *= d
continue
num[i] *= a
if num[1]-num[4] == 0 :
y = 0
if num[0] == 0:
x = 0
y = (num[2]-num[5]) // (num[1]-num[4])
x = (num[2]-(num[1]*y)) // num[0]
# ans = [x,y]
# print(' '.join(map(str, ans)))
print(x, y)
다른 사람 코드 1 - 연립 방정식 (근의 공식 활용)
import sys
input = sys.stdin.readline
a,b,c,d,e,f = map(int, input())
x = (e*c)-(b*f)) // ((a*e)-(d*b)
y = (a*f)-(d*c)) // ((a*e)-(d*b)
print(x, y)
시간 복잡도 : O(1)
다른 사람 코드 2 - 브루트 포스 (모든 경우의 수를 찾음)
a, b, c, d, e, f = map(int, input().split())
for i in range(-999, 1000):
for j in range(-999, 1000):
if (a*i) + (b*j) == c and (d*i) + (e*j) == f:
print(i,j)