CodingTest/Softeer

[softeer] 소프티어(파이썬): H-클린알파 ★★★★

JunJangE 2021. 5. 16. 18:33

문제

 

Softeer

제한시간 : C/C++/Java/Python(1초) | 메모리 제한 : 256MB 나날이 심해지는 미세먼지로 인해 야외뿐만 아니라 집 안에서도 마음 놓을 수 없는 날이 계속되고 있다. 유해 물질이 창문 틈새로 새어 들어오

softeer.ai

- 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

 

junjange/CodingTest

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com