알고리즘 분류 : 수학, 브루트포스 알고리즘
https://www.acmicpc.net/problem/15888
15888번: 정답은 이수근이야!!
0이 아닌 세 개의 정수 A, B, C가 주어진다. (-100 ≤ A, B, C ≤ 100) 이는 Ax2 + Bx + C = 0꼴인 이차방정식의 계수를 의미한다.
www.acmicpc.net
[ 풀이 ]
이 문제는 이차방정식의 판별식과 근을 구하는 근의 공식을 알아야 풀 수가 있다.
ax²+bx+c=0 꼴인 이차방정식에서 서로 다른 두 근이 존재하려면 판별식 b^2 - 4*a*c>0 이 되야 한다.
그리고 이 부등식을 만족시킨다고 해도 답이 "이수근"이 되려면 두 근이 모두 2^k 가 되야 한다.
이때 두 근을 근의 공식으로 구하고 두 근이 2^k 인지 구하기 위해 두 근을 계속 2로 나누다가 1이 되면 2^k,
1보다 작다면 2^k 이 아니다.
그리고 "이수근"이 아니라면 "정수근"인지 확인을 해야 한다. int(x1)과 int(x2)가 각각 x1, x2와 같다면 "정수근"이다.
마지막으로 판별식 b^2 - 4*a*c<=0 이거나 int(x1)과 int(x2)가 각각 x1, x2와 다르다면 "둘다틀렸근"이 된다.
[ 코드 ]
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
32
|
import math
import sys
a,b,c=map(int,input().split())
t1,t2=0,0
if b*b-4*a*c>0:
x1=((-1*b)+math.sqrt(b*b-4*a*c))/(2*a)
while True:
x1/=2
if x1==1:
t1=1
break
elif x1<1: break
x2=((-1*b)-math.sqrt(b*b-4*a*c))/(2*a)
while True:
x2/=2
if x2==1:
t2=1
break
elif x2<1: break
if t1==t2==1:
print("이수근")
sys.exit()
else:
x1=((-1*b)+math.sqrt(b*b-4*a*c))/(2*a)
x2=((-1*b)-math.sqrt(b*b-4*a*c))/(2*a)
if int(x1)==x1 and int(x2)==x2:
print("정수근")
sys.exit()
print("둘다틀렸근")
|
'코딩 > 백준' 카테고리의 다른 글
[백준] 15887번 : 욱제는 결벽증이야!! (Python 파이썬) (0) | 2021.07.25 |
---|---|
[백준] 2840번 : 행운의 바퀴 (Python 파이썬) (0) | 2021.04.04 |
[백준] 1091번 : 카드 섞기 (Python 파이썬) (0) | 2021.04.03 |
[백준] 1700번 : 멀티탭 스케줄링 (Python 파이썬) (0) | 2021.02.22 |
[백준] 2858번 : 기숙사 바닥 (Python 파이썬) (0) | 2021.02.21 |