Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DP
- Algorithm
- BASIC
- Python
- Cleancode
- C언어
- 생활코딩
- 인프런
- Algospot
- 따라하면서 배우는 C언어
- 종만북
- programmers
- server
- 따배씨
- JavaScript
- dfs
- 정수론
- BFS
- web
- 백준
- udemy
- sorting
- BOJ
- C
- Math
- 따라하며 배우는 C언어
- php
- greedy
- graph
- String
Archives
- Today
- Total
몽상실현개발주의
[Algospot] 이분법 / ROOTS / Python 파이썬 본문
https://www.algospot.com/judge/problem/read/ROOTS
풀이
최대 5차 방정식의 해를 이분법을 이용하여 근사하는 문제이다.
이분법의 구간은 최소 -10, 주어진 방정식 그래프의 변곡점, 최대 10 으로 두고 이분법을 실행하여야 한다.
변곡점은 주어진 방정식을 미분한 식의 해 이므로, 해를 근사 할 수 있는 1차방정식까지 연속하여 미분하고 이를 이용하여 해를 구하는 방법으로 풀이하였다.
C = int(input())
# 근사하여 x 의 해 찾기
def findZero(lo, hi, diff, N):
lo_sol = 0
for j in range(N+1):
lo_sol += diff[j] * (lo ** (N-j))
hi_sol = 0
for j in range(N+1):
hi_sol += diff[j] * (hi ** (N-j))
if hi_sol < lo_sol:
hi, lo = lo, hi
half = (hi+lo) / 2
for i in range(100):
sol = 0
for j in range(N+1):
sol += diff[j] * (half ** (N-j))
if -1 * 10**(-11) <= round(sol, 10) <= 10**(-11):
return half
if sol > 0:
hi = half
half = (hi+lo) / 2
else:
lo = half
half = (hi+lo) / 2
def DFS(N, diff):
if N == 1:
return [-10, (-1*diff[1]) / diff[0], 10]
n = N-1
n_diff = []
# 미분
for i in range(N, 0, -1):
n_diff.append(i * diff[N-i])
section = DFS(n, n_diff)
# 최소 -10
res = [-10]
for i in range(N):
lo = section[i]
hi = section[i+1]
# 미분한 방정식의 해
res.append(findZero(lo, hi, diff, N))
# 최대 10
res.append(10)
return res
for _ in range(C):
N = int(input())
origin = list(map(float, input().split()))
res = DFS(N, origin)
# -10, 10 제외한 결과
print(" ".join(map(str, res[1:-1])))
※ 수학을 못해서 몇일동안 고생하였다...
'Algorithm PS > Algospot' 카테고리의 다른 글
[Algospot] 비트마스크 / GRADUATION / Python 파이썬 (0) | 2021.10.19 |
---|---|
[Algospot] 정수론 / POTION / Python 파이썬 (0) | 2021.10.04 |
[Algospot] 정수론 / PASS486 / Python 파이썬 (0) | 2021.09.22 |
[Algospot] 이진탐색 / RATIO / Python 파이썬 (0) | 2021.09.22 |
[Algospot] 이분법 / LOAN / Python 파이썬 (0) | 2021.09.22 |
Comments