CS/알고리즘_문제풀이(파이썬)

2차식 정답 추측

Jedy_Kim 2021. 7. 2. 16:25
728x90

문제

2차식 f(x) = x*x+ x 가 있고, 숫자 a가 주어진다. 우리는 f(x) = a 를 만족하는 x의 값을 찾고 싶지만, 보통 이 값은 정수로 떨어지지 않는 경우가 많다. 예를 들어, f(x) = 20 을 풀고자 한다면, x = 4이기 때문에 이는 정수이지만, f(x) = 103 을 풀고자 한다면 이는 x = 9.6612... 로써 정수가 아니다.

이 문제에서는 x의 정수부분이 얼마인지를 구하는 프로그램을 작성하시오. 단, x 는 음수를 제외한 정수이다. 예를 들어, f(x) = 103 을 풀고자 한다면, x = 9.6612... 이기 때문에 정수부분은 9가 된다.

 

입력

첫 번째 줄에 숫자 a가 주어진다. ( 1 ≤ a ≤ 1,000,000,000,000,000,000 )  

출력

f(x) = a 를 만족하는 음수를 제외한 정수 x의 정수부분을 출력한다.  

예제 입력

103

예제 출력

9

 

#코드

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import sys
 
# 2차식 f(x) = x*x+ x 가 있고, 숫자 a가 주어진다.
# f(x) = a 를 만족하는 x의 값을 찾고 싶지만, 보통 이 값은 정수로 떨어지지 않는 경우가 많다.
# f(x) = 20 을 풀고자 한다면, x = 4이기 때문에 이는 정수이지만
# f(x) = 103 을 풀고자 한다면 이는 x = 9.6612... 로써 정수가 아니다.
# x의 정수부분이 얼마인지를 구하는 프로그램을 작성하시오.
#단, x 는 음수를 제외한 정수이다. 
# f(x) = 103 을 풀고자 한다면, x = 9.6612... 이기 때문에 정수부분은 9가 된다.
 
if __name__ == "__main__":
  input = sys.stdin.readline
  a     = int(input())
  flag  = True
  start = 0
  end   = 1000000000
  
  temp_res_s = start*start+start
  temp_res_e = end*end+end
  if temp_res_s == a or temp_res_e == a:
    print(start)
    flag = False 
    
  if temp_res_s == a or temp_res_e == a:
    print(end)
    flag = False 
  
  
  if flag: 
    isPerfect = False
    while start+1<end:
      mid = (start+end)//2
      
      temp_res = mid*mid+mid
      
      if temp_res == a: 
        print(mid)
        isPerfect = True
        break
      if temp_res < a:
        start = mid
      else:
        end = mid
      
    if not isPerfect:
      print(start)  
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

중복 없는 구간  (0) 2021.07.02
나무 자르기  (0) 2021.07.02
두 용액  (0) 2021.06.30
숫자박스  (0) 2021.06.30
이진탐색  (0) 2021.06.30