문제풀이/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)