수현이는 4차 산업혁명 시대에 살고 있는 중학생이다. 코로나 19로 인해, 수현이는 버추얼 학교로 버추얼 출석해 버추얼 강의를 듣고 있다. 수현이의 버추얼 선생님은 문자가 2개인 연립방정식을 해결하는 방법에 대해 강의하고, 다음과 같은 문제를 숙제로 냈다.
다음 연립방정식에서 x와 y의 값을 계산하시오.
ax + by = c
dx + ey = f
4차 산업혁명 시대에 숙제나 하고 앉아있는 것보다 버추얼 친구들을 만나러 가는 게 더 가치있는 일이라고 생각했던 수현이는 이런 연립방정식을 풀 시간이 없었다. 다행히도, 버추얼 강의의 숙제 제출은 인터넷 창의 빈 칸에 수들을 입력하는 식이다. 각 칸에는 -999 이상 999 이하의 정수만 입력할 수 있다. 수현이가 버추얼 친구들을 만나러 버추얼 세계로 떠날 수 있게 도와주자.
2개의 변수에 대한 연립방정식의 해를 구하자
숫자의 범위는 -999부터 999까지이기 때문에 숫자를 하나하나 첫번째 식에 넣어보고 그에 따른 x,y 를 두번째 식에 하나하나 넣어보면 된다. 이 때 최악의 경우는 첫번재 식에서 모든 x, y가 해일때인데 이는 O(n^3)의 시간이 걸린다.
import sys
if __name__ == '__main__':
num_list = list(map(int, sys.stdin.readline().split()))
value = []
for i in range(-999, 1000):
for j in range(-999, 1000):
if num_list[0] * i + num_list[1] * j == num_list[2]:
value.append([i, j])
for xy in value:
if num_list[3] * xy[0] + num_list[4] * xy[1] == num_list[5]:
print(xy[0], xy[1])
break
처음에는 연립방정식을 풀기위한 알고리즘을 만들었는데 생각보다 a,b,c,d,e,f가 0일때를 처리하기가 너무 힘들었다. 생각해보니 숫자의 범위가 작기 때문에 이 문제 자체가 브루트포스 문제라는걸 직감했고 위와 같이 문제를 풀게 되었다. 아마 이 문제의 의도도 위와 같을 것으로 예상된다. 숫자의 범위가 작다면 브루트포스를 고려하는 생각을 가져야겠다.