이분탐색법으로 풀었다.
풀이방법을 생각하는 것은 어렵지 않았는데, 헷갈리는 몇 가지가 있었다. 그래서 엄청 많이 틀리다가 겨우 맞았다..
🤔헷갈렸던 것들🤔
1. 초등학교 때 배웠던 거리, 속력, 시간의 관계 생각하기..^^
아래 나온 코드를 짤 때, 거 속 시를 활용했다.
def useOil(speed):
return (a * (speed ** 4) + b * (speed ** 3) + c * (speed ** 2) + d * speed) * (m / speed)
나중에는 아래와 같이 정리했다.
return ((a * (speed ** 3) + b * (speed ** 2) + c * (speed) + d) * m)
2. 소수점 고려하기!
이분탐색법 문제를 풀 때, mid=(left+right)//2, left=mid+1 이런 식으로 많이 풀었다. 그래서 처음에는 습관적으로(?) 그렇게 했는데 틀렸다. 생각해보니까 이 문제에서는 소수점 둘째자리까지 구해야 하는 것이었다. 그래서 아래와 같이 했다.
le = mid
else:
ri = mid
3. 소수점 둘째자리까지 버림해서 출력하는 것!
가장 오래 헤맸던 부분..ㅠㅠ
print("{0:.2f}".format(mid))
print("%.2f" %mid)
처음에는 위와 같이 했다. 그런데 반올림 처리가 되어서,, 내가 원하던 것이 아니었다.
그래서 아래와 같이 복잡하게 처리했다.
mid=str(round(mid,3))
mid=float(mid[:-1])
print("%.2f" %mid)
그런데 이렇게 해도 round로 반올림하기는 하는 거니까 정답에 영향을 준다.
그래서 일주일 정도 고민하고, 친구에게 도움을 받아서 아래와 같이 풀었다!!
ans=int(ans*100)
ans=ans/100
print("%.2f" %ans)
4. 이분탐색의 범위를 정하는 것
전에 풀었던 문제들은 이분탐색의 시작점, 끝점이 딱 정해있었다. 그런데 이 문제는 끝점이 딱히 정해있지 않았다. 이것도 친구에게 물어봤다. 그럴 때는 10의 18승으로 잡고 하는 경우가 많다고 해서 그렇게 하다가, 나중에 10의 6승으로 바꿨다.
🥳완성한 코드🥳
while True:
try:
a, b, c, d, m, t = map(float, input().split())
def useOil(speed):
return ((a * (speed ** 3) + b * (speed ** 2) + c * (speed) + d) * m)
ans=0
le = 0
ri = 10**6
for _ in range(400):
mid = (le + ri) / 2
if (useOil(mid)<=t):
ans = max(mid, ans)
le = mid
else:
ri = mid
ans=int(ans*100)
ans=ans/100
print("%.2f" %ans)
#print("%.2f" %ans)
except: break
🌸 문제 풀려고 하다가 찾은 것들..
🌺 반올림은 round를 활용하면 된다. round(대상, 몇째짜리까지 남겨둘건지)
answer=100.12345
print(round(answer,3)) #100.123
answer=100.12399
round(answer,3) #100.124
🌺 올림, 내림의 경우, math 모듈에 관련 함수가 있다.
ceil: 올림
import math
print(math.ceil(3.9)) #4
paint(math.ceil(-3.9)) #-3
floor: 내림
import math
print(math.floor(3.9)) #3
paint(math.floor(-3.9)) #-4
그런데 소수점 몇째자리에서 올림, 내림을 할 수는 없고 정수형으로 올림, 내림을 해준다.. 그래서 이 문제에서는 쓸 수 없었다.
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 1747번: 소수&팰린드롬 (0) | 2021.10.08 |
---|---|
[백준-파이썬] 2805번: 나무 자르기 (0) | 2021.10.08 |
[백준-파이썬] 16505번: 별 (0) | 2021.10.08 |
[백준-파이썬] 2667번: 단지번호 붙이기 (0) | 2021.10.08 |
[백준-파이썬] 1012번: 유기농 배추 (0) | 2021.10.08 |