jyamethyst21 님의 블로그

백준 19532번- '수학은 비대면강의입니다' (PYTHON 풀이) 본문

CODING 💻

백준 19532번- '수학은 비대면강의입니다' (PYTHON 풀이)

jyamethyst21 2025. 10. 6. 15:10

문제:

문제는 다음과 같다. 우리가 수학시간에 배웠던 연립방정식을 코드로 구현하면 된다.

 

풀이:

1x + 3y = -1
4x + 1y = 7

4x 12y = -4
4x + 1y = 7
11y = -11
y = -1
x = 2

연립방정식을 손으로 풀 때 어떤 과정을 거쳐서 푸는지 생각해보면 위와 같다. (소거법)

두 식이 있을 때 x 또는 y를 비교해서 수를 맞춰주고 바뀐 식에 한해 전체 자리에 해당 값을 곱해준다.

세세한 과정을 보기 위해 이 과정을 단순히 순서대로 코드로 작성해보았다.

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

if a % d == 0:
    re1 = True
elif d % a == 0:
    re2 = True

if re1 == True:
    d = d*a
    e = e*a
    f = f*a
elif re2 == True:
    a = a*d
    b = b*d
    c = c*d
elif re1 == False or re2 == False:
    a=a*d
    b=b*d
    c=c*d
    d=a*d
    e=a*e
    f=a*f

temp1 = b-e
temp2 = c-f
final2 = temp2 // temp1
final1_1 = c-b*final2
final1 = final1_1 // a
print(final1, final2)

정말 무식한 방법으로 앞서 설명한, 손으로 연립방정식을 풀 때(소거법) 그 과정을 따라서 가면 이렇게 긴 코드가 나온다.(무식하지만 더 간단하게도 풀 수 있다. 굳이 False, True를 사용할 필요 없음)

비쥬얼스튜디오코드에서는 모든 예제에 대해 정답이 출력되었는데 백준에서는 틀렸다고 뜬다. 반례가 있는 모양이다. 예상 가는 부분은 있는데 어차피 실무에서 이렇게 무식하게 하지 않을테니까 간단히 문제를 풀어보겠다.

일단 위 코드는 손으로 연립방정식을 풀 때와 같이 차례로 넣은 코드이니까 연립방정식에 대해서 어떤 로직인지 잊으신 분은 위를 참고하시길 바란다. (백준 예제 한정으로만)

 

최종 코드:

a,b,c,d,e,f = map(int,input().split())
print((c*e-b*f)//(a*e-b*d), (a*f-d*c)//(a*e-b*d))

크래머 공식이라고 한번쯤 들어봤을 거다. 아니 이름은 못 들었을지언정 공식이라도!

크래머 공식은 행렬식을 이용해 변수와 방정식의 개수가 같은 연립일차방정식의 해를 구하는 방법이다.

공식은 다음과 같다.

 

해당 공식을 사용하면 아주 간단히 상기 코드처럼 작성할 수 있고 정말 빠르게 풀 수 있다.