문제
- 1초 간격으로 바이러스들이 집 안으로 침입한다.
- 집 안에서 바이러스는 1초당 P배씩 증가한다.
- N초동안 죽는 바이러스는 없다.
- N초후에는 총 몇 마리의 바이러스를 잡아야 하는지를 구하는 문제이다.
- 증가율이 P일때 1 ≤ P ≤ 10^8인 정수이다.
- 총 시간이 N일때 1 ≤ N ≤ 10^6인 정수이다.
- 매초 침입하는 바이러스의 수가 A일때 1 ≤ A ≤ 10^8인 정수이다.
- 최종 바이러스 개수를 1000000007로 나눈 나머지를 출력한다.
알고리즘
- 증가율과 총 시간을 입력받는다.
- 매초 침입하는 바이러스의 숫자를 입력받아 리스트에 넣는다.
- 반복문을 통해 바이러스와 바이러스의 증가율을 곱한 값을 총바이러스에 더해준다.
- 바이러스를 초가 지날수록 침입시킨다.
- 모두 더한 총바이러스의 수를 출력하면 된다.
코드
import sys
p, n = map(int,sys.stdin.readline().split())
a = list(map(int,sys.stdin.readline().split()))
# 처음 바이러스를 변수 안에 넣는다.
# 1초때 침입한 바이러스
result = a[0]
# 2초부터 n초만큼 반복한다.
for i in range(1, n):
# result에 바이러스 증가율를 곱해주고 1000000007로 나눈 나머지를 넣는다.
result = (result * p) % 1000000007
# 초가 지날수록 바이러스가 침입하기때문에 바이러스를 더해준다.
result += a[i]
# 총 바이러스 개수 출력
print(result)
결과
위 코드에서 for문 바로 밑에 print(result)를 작성하면 바이러스의 총 수의 증가를 출력 화면과 같이 확인할 수 있다.
위 출력 화면을 보게 되면 1초일 때 총 바이러스의 수는 1마리이다. 2초일 때는 1마리였던 바이러스가 3배 증가하여 3마리가 되고 바이러스 2마리가 재 침입해 총 바이러스의 수는 5마리가 된다. 3초일 때는 5마리였던 바이러스가 3배 증가하여 15마리가 되고 바이러스 3마리가 재 침입해 총 18마리가 되면서 시간 초가 끝나게 된다.
따라서 코드를 분석하게 되면 처음 침입한 바이러스를 미리 변수 안에 넣어 1초의 시간이 흐르는 것을 가정하고 반복문을 통해 매 초마다 바이러스를 증가시키고 재 침입시켜 총바이러스를 증가시키면 된다. 이때, 최종 바이러스 개수를 1000000007로 나눈 나머지로 출력하라고 했기 때문에 항상 바이러스의 개수를 1000000007로 나눈 나머지 값으로 출력한다.
github
'CodingTest > Softeer' 카테고리의 다른 글
[softeer] 소프티어(파이썬): 수퍼바이러스 ★★★ (0) | 2021.05.17 |
---|---|
[softeer] 소프티어(파이썬): 바이러스 ★★ (0) | 2021.05.17 |
[softeer] 소프티어(파이썬): 강의실 배정 ★★★ (0) | 2021.05.16 |
[softeer] 소프티어(파이썬): 우물 안 개구리 ★★★ (0) | 2021.05.16 |
[softeer] 소프티어(파이썬): 성적 평균 ★★★ (0) | 2021.05.16 |