[Python] 코딩 도장 - 이차방정식
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: 이차방정식] - Lv.1
A씨는 학교숙제로 이차방정식 문제를 풀어야 한다.
하지만 시간이 얼마 없다.
이 A씨를 도와주기 위한 이차방정식 풀이 프로그램을 작성해라.
단, 이차방정식은 ax^2 + bx + c = 0의 꼴에서 a, b와 c를 입력받아 해를 구하고 해를 구하기 위해 근의 공식을 사용해야 한다.
또, 해는 정수로 반올림한 값을 구하고 해가 없거나 여러개인 경우도 모두 구해야 한다.
출처: https://codingdojang.com/scode/577?answer_mode=hide
[풀이]
import math
class quadratic_error(Exception):
pass
def solution(a,b,c):
try:
# a가 0 인 경우
if a == 0:
raise quadratic_error
# 해가 2개인 경우
if b**2 - 4*a*c > 0:
x1 = (-b + math.sqrt(b**2 - 4*a*c)) / 2*a
x2 = (-b - math.sqrt(b**2 - 4*a*c)) / 2*a
print( round(x1), round(x2))
# 해가 1개인 경우
elif b**2 - 4*a*c == 0:
x1 = (-b + math.sqrt(b**2 - 4*a*c)) / 2*a
print(round(x1))
# 해가 없는 경우
elif b**2 - 4*a*c < 0:
raise ValueError
except ValueError:
print("해가 없습니다.")
except quadratic_error:
print("a는 0이 아닌 수를 입력하세요.")
solution(1,7,12)
solution(1,-2,1)
solution(2,3,12)
solution(0,3,12)
-3 -4
1
해가 없습니다.
a는 0이 아닌 수를 입력하세요.
해는 근의 공식으로 간단하게 구할 수 있다.
try
, except
를 이용해서 해가 없는 경우와 이차 방정식이 아닌 경우 메시지를 출력하는 방법으로 코드를 짰다.
a,b,c가 숫자가 아닌 경우 예외 처리도 작성하려다가 어처피 에러가 발생하니 그냥 두었다.
[추천 풀이]
def fun(a,b,c):
D=b*b-4*a*c
if D>0:
x1=round((-b-D**0.5)/2*a)
x2=round((-b+D**0.5)/2*a)
print("x","=",x1,",",x2)
elif D==0:
x=round(-b/2*a)
print("중근입니다")
print("x","=",x)
else:
print("허근입니다")
a=int(input("a를 입력해 주세요."))
b=int(input("b를 입력해 주세요."))
c=int(input("c를 입력해 주세요."))
fun(a,b,c)
a를 입력해 주세요.0
b를 입력해 주세요.7
c를 입력해 주세요.12
x = 0 , 0
다른 분이 푸신 풀이 중 추천 수가 많은 풀이이다.
풀이는 거의 비슷한데 예외 처리 사용 유무의 차이만 있다.
이 분 코드로는 a가 0인 경우는 답이 안나오는데 문제가 이차 방정식인데 고려하기 애매하기도 하고..
그리고 나는 math
의 sqrt()
를 사용했는데 위 코드처럼 최대한 패키지를 안쓰는 게 좋아보이긴 한다.
Leave a comment