백준 19532 수학은 비대면강의입니다

Yesol Lee·2022년 5월 24일
0

알고리즘

목록 보기
15/31
post-custom-banner

백준 19532 수학은 비대면강의입니다

문제

ax+by=c, dx+ey=f 연립방정식의 상수 6개를 받아 해 x, y 출력

코드

반복문 중첩

a, b, c, d, e, f = map(int, input().split())

for x in range(-999, 1000):
    for y in range(-999, 1000):
        if (a*x + b*y == c) and (d*x + e*y == f):
            print(x, y)
            break
  • x, y의 범위가 정해져있어서 의외로 반복문 중첩으로도 통과가 된다.
  • 이 방법을 안 쓰고 싶어서 역행렬 방법을 시도했는데 입력받은 값의 변수명들을 공식에 잘 대입하지 못해서 좀 헤맸다.

역행렬 공식 이용

  • 연립방정식을 배열곱으로 나타내면 다음과 같다.
입력값 = a, b, c, d, e, f

# 수식
ax + by = c
dx + ey = f

# 수식 -> 배열
[[a, b], [d, e]] * [x, y] = [c, f]
A * X = B

역행렬

# 수식에서 ad-bc 부분
k = a*e-b*d

# x, y 행렬곱 식을 풀어서 넣음
print((e*c-b*f)//k, (-c*d+a*f)//k)
  • 최종 값을 구할 때 그냥 나눗셈보다 // 몫 구하기 연산자를 쓰는 것이 더 정확하다.
profile
문서화를 좋아하는 개발자
post-custom-banner

0개의 댓글