코딩 테스트/백준

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

위시리 2024. 12. 31. 17:10

 

문제 분석

  • 연립 방정식 문제 해결
  • 답은 -999에서 999 사이

 

코드 설계

  • 연립 방정식 계산 방식 고민
  • 입력한 차례대로 index가 0 1 2 3 4 5 라고 했을 때
  1. x의 계수 맞추기
    1. '0' 을 '3', '4', '5' 에 곱
    2. '3' 을 '0', '1', '2'에 곱
  2. y값 구하기
    1. y = ( '2' - '5' ) // ( '1' - '4' )
  3. x값 구하기
    1. '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 - 연립 방정식 (근의 공식 활용)

https://velog.io/@gaeun23/python-Baekjoon-%EB%B0%B1%EC%A4%80-19532-%EC%88%98%ED%95%99%EC%9D%80-%EB%B9%84%EB%8C%80%EB%A9%B4%EA%B0%95%EC%9D%98%EC%9E%85%EB%8B%88%EB%8B%A4

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)