회전 초밥
정말 오랜만에 풀어야 할 문제에 있던 문제를 풀어봤다. 투포인터 문제들을 찾고있었는데 마침 이 문제가 투포인터를 사용한 문제였다.
CODE
import sys
read=sys.stdin.readline
n,d,k,c=map(int,read().split())
num=list(int(read()) for _ in range(n))
num=num+num[:k]
check=list(0 for _ in range(d+1))
check[c]=1
l,r=0,k-1
count=0
for i in num[l:r+1]:
check[i]+=1
if check[i]==1: count+=1
answer=count
while True:
check[num[l]]-=1
if check[num[l]]==0:
count-=1
l+=1
r+=1
if r == n+k-1: break
check[num[r]]+=1
if check[num[r]]==1:
count+=1
answer=max(answer,count)
print(answer+1)
수들의 합2
딱 기본적인 투포인터 문제였던 것 같다.
CODE
import sys
read=sys.stdin.readline
n,m=map(int,read().split())
num=list(map(int,read().split()))
l,r=0,0
answer=0
sum_num=num[0]
while r!=n:
while r!=n:
if sum_num==m:
answer+=1
sum_num-=num[l]
l+=1
break
elif sum(num[l:r+1])>m:
sum_num-=num[l]
l+=1
break
else:
r+=1
if r==n: break
sum_num+=num[r]
print(answer)
풀어야 할 문제
- 스타트 택시
- 미네랄
- 아기 상어
- 전깃줄 -2
- 치즈