문제
https://softeer.ai/practice/6278
해설
이 문제 또한 한가지 규칙을 잘 파악하면 풀 수 있는 문제이다.
즉 1초일 때 일정 갯수의 바이러스가 더해지고, 그 다음 시간부터는 이전 1초의 바이러스가 P만큼 증식하고나서 일정 갯수의 바이러스가 다시 더해진다. 그렇게 N만큼의 시간동안 진행이 되는 규칙을 가진다.
for i in range(N):
if (i>=1):
num_virus *= P
num_virus += viruses[i]
num_virus = num_virus % 1000000007
이를 코드로 작성하면 위와 같다. 매 초마다 바이러스가 침입할 때, 그 바이러스를 더해준다. 그 다음 루프를 돌릴 때면 1초가 지났다는 의미이기 때문에 P만큼을 바이러스를 더하기 전에 곱해준다.
그리고 여기서 "1000000007"로 나눈 나머지를 출력하라고 주어졌기 때문에 매번 바이러스의 값을 계산할 때마다 1000000007의 나머지를 저장해준다. 이렇게 계산해도 "모듈러 산술 원리"에 의해서 결과값은 동일해진다.
https://vehiclewithai.tistory.com/18
모듈러 산술에 대한 설명은 위에 나와있다.
따라서 바이러스의 값을 구할 때마다 1000000007을 나눈 나머지로 저장을 해주어야만 한다. 그렇지 않으면 이 문제의 경우 256MB 메모리 초과가 일어나기 쉽다.
코드
import sys
P, N = map(int, sys.stdin.readline().split())
viruses = list(map(int, sys.stdin.readline().split()))
num_virus = 0
for i in range(N):
if (i>=1):
num_virus *= P
num_virus += viruses[i]
num_virus = num_virus % 1000000007
print(num_virus)
결과
'알고리즘 > 소프티어' 카테고리의 다른 글
[파이썬] Softeer 연습문제 #19. 지우는 소수를 좋아해 완벽해설 (1) | 2024.01.05 |
---|---|
[파이썬] Softeer 연습문제 #18. 택배 마스터 광우 완벽해설 (1) | 2024.01.04 |
[파이썬] Softeer 연습문제 #16. 스마트 물류 완벽해설 (1) | 2024.01.02 |
[파이썬] Softeer 연습문제 #15. 지도 자동 구축 완벽해설 (2) | 2023.12.31 |
[파이썬] Softeer 연습문제 #14. 동계 테스트 시점 예측 완벽해설 (2) | 2023.12.30 |