[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인 경우는 답이 안나오는데 문제가 이차 방정식인데 고려하기 애매하기도 하고..

그리고 나는 mathsqrt()를 사용했는데 위 코드처럼 최대한 패키지를 안쓰는 게 좋아보이긴 한다.

Leave a comment