백준/문제풀이_python

15888 정답은 이수근이야!! _python

휴대용치즈 2022. 10. 26. 20:57

https://www.acmicpc.net/problem/15888

 

15888번: 정답은 이수근이야!!

0이 아닌 세 개의 정수 A, B, C가 주어진다. (-100 ≤ A, B, C ≤ 100) 이는 Ax2 + Bx + C = 0꼴인 이차방정식의 계수를 의미한다.

www.acmicpc.net

정답률23퍼. 보통4번은 틀리는 문제

 

 

 

문제 접근

다른 블로그엔 재대로 읽지않았는데 math.sqrt를 써서 그런지 허수때문에 힘들어하는 부분이 없어보였는데

문제에서 가르쳐주는 모든 경우를 찾다보니 if elif를 많이썼다.

2의 제곱인지 확인하고, 정수인지 확인하는 과정을 거치고 나머지는 "둘다틀렸근"으로 만들었는데,

허수는 int와 비교할 수가 없어서 문자열로 바꾸는 과정을 거쳤다.

그리고 n과 m이 같은경우 또한 따로 빼냈다.

풀고나서 알았는데 근의공식중 b^2 - 4ac부분으로 허수를 판별하는 방법이 있었는데 생각하지 못했다.

이걸 활용하면 더 쉽게 풀 수 있을듯 하다.

 

 

풀이

from math import ceil
import sys
input = sys.stdin.readline

"""
1. 근의공식으로 근부터 구하자
2. 정수인지 판별 -> 정수근
3. 정수근 중에 2^k 체크 -> 이수근
4. else -> 둘다틀렸쮸
"""

#입력
A, B, C = map(int,input().split())
n = (-B + (B**2 - 4*A*C)**0.5)/(2*A)
m = (-B - (B**2 - 4*A*C)**0.5)/(2*A)

# print(n)
# print(m)

#2의 제곱 판별
def powerOfTwo(x):
    if(x<=1):
        return False
    while x>1:
        if x%2!=0:
            return False
        x/=2
    return True
    
#허수 판별을 안하면 int와 비교하는 부분에서 에러가 발생
if str(n)[-2]=="j" or str(m)[-2]=="j":
    print("둘다틀렸근")
elif n==m:
    print("둘다틀렸근")
elif powerOfTwo(n) and powerOfTwo(m):
    print("이수근")
elif n==int(n) and m==int(m):
    print("정수근")
else:
    print("둘다틀렸근")

 

 

 

+)

if str(n)[-2]=="j" or str(m)[-2]=="j":
    print("둘다틀렸근")
elif n==m:
    print("둘다틀렸근")

이부분을 b**2 - (4*A*C)>0으로 판별을 미리 했더라면 없애도 된다.