문제풀이/BOJ
[Python] BOJ/백준 17496번 스타후르츠
서채리
2021. 6. 2. 21:45
[문제]
https://www.acmicpc.net/problem/17496
17496번: 스타후르츠
1, 11, 21, 31, 41 일에 스타후르츠 씨앗을 심으면 됩니다. 51일에 심으면 61일에 수확이 가능한데 여름은 60일까지 이므로 61일에는 수확할 수 없습니다. 따라서 총 5 * 300 = 1500개의 스타후르츠를 수확
www.acmicpc.net
[풀이]
원래는 자바로 백준을 풀었어서 Python 외부 라이브러리를 사용할 수 없는지 몰랐다 ㅎㅎ
대표적으로 numpy를 사용해서 ModuleNotFoundError가 난다고 하는데 나는 sympy를 사용해서 런타임오류가 났다.
방정식 부분만 외부 모듈을 사용하지 않게 코드 수정 중 어이없게도 진짜 간단하게 풀 수 있었다.. 이렇게 비효율적인 코드라니 기억해두려고 남긴다.
+ 그래도 알게된 모듈 sympy
sympy
from sympy import Symbol, solve
x = Symbol('x')
equation = x * 2 + 7
solve(equation, dict = True)
solve 실행 시 기본적으로는 list값으로 해가 반환되고, 옵션인 dict 값을 True로 주면 dict 값으로 반환한다.
[코드]
- 런타임오류 : ModuleNotFoundError
from sympy import Symbol, solve
def find_plant_cnt(g_duration, s_duration):
x = Symbol('x')
equation = 1 + (g_duration * x) - s_duration
result = solve(equation).pop()
return int(result)
def find_revenue(s_duration, g_duration, blank, price):
plant_cnt = find_plant_cnt(g_duration, s_duration)
result = blank * plant_cnt * price
return result
if __name__ == '__main__':
n, t, c, p = map(int, input().split())
print(find_revenue(n, t, c, p))
- 제출 코드
if __name__ == '__main__':
n, t, c, p = map(int, input().split())
print((n-1)//t * c * p)