회전 초밥

정말 오랜만에 풀어야 할 문제에 있던 문제를 풀어봤다. 투포인터 문제들을 찾고있었는데 마침 이 문제가 투포인터를 사용한 문제였다.

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
  • 치즈