스터디/코딩테스트

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

공대생철이 2024. 1. 30. 17:16
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