티스토리 뷰

알고리즘

백준 19532 - 파이썬

취뽀가자!! 2024. 1. 15. 23:27

https://acmicpc.net/problem/19532

 

19532번: 수학은 비대면강의입니다

정수 $a$, $b$, $c$, $d$, $e$, $f$가 공백으로 구분되어 차례대로 주어진다. ($-999 \leq a,b,c,d,e,f \leq 999$) 문제에서 언급한 방정식을 만족하는 $\left(x,y\right)$가 유일하게 존재하고, 이 때 $x$와 $y$가 각각 $-

www.acmicpc.net

문제 풀이

이번 문제는 연립방정식을 활용하면 되는 문제로, 가장 먼저 y로 정리를 해줬다. 

x = (c-by) / a
y = (af - dc) / (ae -bd)

 

이렇게 정리를 해 주고 코드 짤 때도 위 식을 그대로 옮겨주면 끝나겠다 싶었다. 하지만 출력 결과 런타임 에러가 발생했다.

 

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

y = int((a*f - d*c) / (a*e - b*d))
x = int((c-b*y) / a)

print(x,y)

 

 

왜 그런가 싶어 질문게시판에 들어가 보니 나와 비슷한 문제들을 찾아볼 수 있었는데, 분모가 0이 되었을 경우 런타임 에러가 발생하는 것이다. 왜냐하면 컴퓨터는 10 / 2를 계산할때 2를 몇번 반복하여 뺐는지로 답을 도출한다. 즉, 0인 경우에는 아무리 빼도 답이 나오지 않기 때문에 무한 루프에 걸리게 되는 것이다. 보통의 언어들은 0으로 나눌 경우 에러를 반환하는데, 파이썬의 경우가 그렇다.

 

https://ko.wikipedia.org/wiki/0%EC%9C%BC%EB%A1%9C_%EB%82%98%EB%88%84%EA%B8%B0

 

0으로 나누기 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. y = 1 x {\displaystyle y={\frac {1}{x}}} 꼴의 반비례 그래프. 한 변수의 값이 0에 가까워질수록 다른 변수의 값은 무한대로 발산한다.( x {\displaystyle x} =0일 때는 정의되지

ko.wikipedia.org

 

그래서 첫번째 방정식은 x로 정리해 주고, 두번째 방정식은 y로 정리해 주면서 0으로 나누는 경우를 방지했다.

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

x = int((e*c - b*f) / (a*e - b*d))
y = int((a*f - d*c) / (a*e - b*d))

print(x,y)

 

이번에는 브루트포스로 문제를 해결해 봤다.

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

x,y = 0,0
for i in range(-999,1000):
    if (a*e-b*d)*i - a*f + d*c == 0:
        y = i
        break

for i in range(-999,1000):
    if d*i + e*y -f == 0:
        x = i
        break

print(x,y)

 

입력 조건이 -999 부터 999까지인 것을 이용하여 반복문의 범위를 정해주고, x와 y를 y부터 순서대로 찾아줬다.

 

이처럼 브루트포스를 이용해서 풀면 시간이 더 소요되는 것을 알 수 있다.

 

느낀점

x와 y의 식을 찾는데는 오래 걸리지 않았으나 0으로 나눠 발생하는 런타임 에러 발생은 좀 당황했었다. 이 경우 우회할 수 있는 방법도 새로 알게 되었고, 또한 스스로 연립방정식의 식과 브루트포스 모두 스스로 풀며 조건들을 적절히 잘 활용하였다는 점에 실력이 한 층 더 늘은 거 같아 기쁘다.

'알고리즘' 카테고리의 다른 글

백준 1436 - 파이썬  (0) 2024.01.19
백준 1018 - 파이썬  (0) 2024.01.17
백준 24313 - 파이썬  (0) 2024.01.05
백준 24267 - 파이썬  (4) 2024.01.01
백준 24262 - 파이썬  (0) 2023.12.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함