[Silver I] 2000문제 푼 임스 - 25822
분류
다이나믹 프로그래밍, 두 포인터
문제 설명
이 문제는 문제 출제를 위해 꾸준히 문제를 풀어 2000문제 풀이를 달성한 임스가 처음으로 출제한 문제입니다. 임스는 문제 출제를 위해 매일 0 ~ 24문제를 풀었습니다. 임스가 스트릭을 끊기지 않기 위해 계속해서 문제를 풀었으나, 아쉽게도 며칠은 문제를 풀 수 없는 날이 생겼습니다. 임스는 문제를 풀지 못한 날엔 스트릭 프리즈를 통해 스트릭을 유지할 수 있습니다. 스트릭 프리즈는 0.99코인이고, 임스가 구매할 수 있는 최대의 양만큼 스트릭 프리즈를 구매합니다. 그러나 임스가 최대로 사용할 수 있는 개수가 2개입니다.
스트릭 프리즈를 사용할 경우, 해당 일자에는 문제를 풀었다고 가정하게 되어 스트릭은 유지됩니다. 임스가 가지고 있는 코인 C와 임스가 N일 동안 문제를 푼 정보가 주어집니다. 이 때 임스가 보유하고 있는 스트릭 프리즈를 사용하여 "스트릭 유지 연속 일수"를 최대로 유지한 날과 N일 중 하루에 가장 많이 푼 문제 수를 출력합니다. 주어진 일수 이전과 이후에 스트릭을 유지하고 있다고 가정합니다.
입력
첫 번째 줄에는 임스가 가지고 있는 코인 C가 d.dd 형식으로 주어집니다. (0.00≤C≤5.00)(0.00≤≤5.00)
두 번째 줄에는 임스가 스트릭을 유지하기 위하여 문제 풀이를 시도한 날의 수 N이 주어집니다. (1≤N≤100000)(1≤≤100000)
세 번째 줄에는 공백으로 구분된 수가 N개 주어집니다. 이 때 i번째로 나타난 수는 i일째에 임스가 푼 문제 수를 의미합니다.
출력
첫 번째 줄에는 임스가 스트릭을 유지한 날을 출력합니다.
두 번째 줄에는 임스가 문제를 최대로 많이 푼 개수를 출력합니다.
import sys
input = sys.stdin.readline
C = float(input())
C = int(min(2, C // (0.99)))
N = int(input())
problems = list(map(int, input().split()))
streak = [0] * (N + 1)
p_max = problems[0]
for i in range(N):
if problems[i] == 0:
streak[i + 1] = streak[i] + 1
else:
streak[i + 1] = streak[i]
p_max = max(p_max, problems[i])
left = 1
right = 1
d_max = 0
while right <= N:
buy = streak[right] - streak[left - 1]
if buy <= C:
d_max = max(d_max, right - left + 1)
right += 1
else:
left += 1
print(d_max)
print(p_max)
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준 / Python 파이썬] 26091번 - 현대모비스 소프트웨어 아카데미 (0) | 2023.06.13 |
---|---|
[백준 / Python 파이썬] 6503번 - 망가진 키보드 (0) | 2023.06.13 |
[백준 / Python 파이썬] 25214번 - 크림 파스타 (0) | 2023.06.13 |
[백준 / Python 파이썬] 15565번 - 귀여운 라이언 (0) | 2023.06.13 |
[백준 / Python 파이썬] 2670번 - 연속부분최대곱 (0) | 2023.05.27 |