관리 메뉴

JIE0025

[▲][Softeer][level3] 수퍼바이러스 - 파이썬(Python) 본문

알고리즘/Softeer

[▲][Softeer][level3] 수퍼바이러스 - 파이썬(Python)

Kangjieun11 2023. 2. 1. 21:02
728x90

 

 

 

 

문제

수퍼바이러스가 숙주의 몸속에서 0.1초당 P배씩 증가한다.

 

처음에 수퍼바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 수퍼바이러스로 불어날까?

N초 동안 죽는 수퍼바이러스는 없다고 가정한다.

 

수퍼바이러스는 일반 바이러스에 비해서 훨씬 오래 생존할 수 있기 때문에 N이 매우 클 수 있다.

 

 

 


 

입력값이 너무 커서 당황스러웠던 문제..

 

 

사실 이 문제가 요구하는 것 자체는 아래 문제와 같다.

 

https://jie0025.tistory.com/425

 

[Softeer][level2] 바이러스 - 파이썬(Python)

JIE0025 [Softeer][level2] 바이러스 - 파이썬(Python) 본문 알고리즘/Softeer [Softeer][level2] 바이러스 - 파이썬(Python) Kangjieun11 2023. 1. 27. 22:27

jie0025.tistory.com

 

 

 

일단 0.1초에 P배씩 증가하기때문에 공식은 다음과 같다.

 

 

이걸 그대로 위에 바이러스문제에서 사용한 공식처럼 생각하면 시간초과가 날거라는걸 예상할 수 있다.

 

시간제한이 2초라서 파이썬기준 4천만정도의 연산이 가능한데.. 입력값 k, p, n 모두 4천만보다 큰 값이기도 하고,

반복문의 입력으로 사용되는 n이 특히나 1경? 이라서 절대 불가능하다.

 

 

 

1경을 계속 2로 나누면 몇번만에 1이 되는지 검색해보려고 log 계산기도 검색해서 사이트 들어가봤는데 1경을 입력으로 받아주지도 않았음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

100조가 그래도 46.xxxx로나오는걸 보면.. 2로나누는 게 필요하겠다 생각하긴 했다.

그럼 2로나눴을떄 홀수이면? 짝수이면? 어떻게 해줘야할까?

 

여기까지 생각하면서 머리를 싸매다가 결국 정답을 검색해보긴 했는데 정답과 비슷한 사고를 하긴 했다.. (이건 참 다행인듯...)

 

 

참고한 블로그...!

https://fre2-dom.tistory.com/22

 

[softeer] 소프티어(파이썬): 수퍼바이러스 ★★★

문제 Softeer 제한시간: C/C++(1초), Java/Python(2초) | 메모리 제한: 256MB 수퍼바이러스가 숙주의 몸속에서 0.1초당 P배씩 증가한다. 처음에 수퍼바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 수퍼

fre2-dom.tistory.com

 

 

 

 

💻 정답코드

import sys
input = sys.stdin.readline

#지수 재귀로 풀어야함.. 그럴줄 알았어..재귀에 겁먹지말자!!!
def f(x,y) :
    if y == 1:
        return x

    elif (y%2 == 0):
        res = f(x , y/2)
        return (res * res) % 1000000007
    else: 
        res = f(x, (y-1)/2)
        return (res * res * x) % 1000000007

    
k, p, n = map(int,input().split())

result = f(p, n*10) * k

print(result% 1000000007)

 

 

 

생각했으면 끝까지 하자!!!!!!! 겁먹지 말자 ㅠㅠ