올바른 배열
거의 처음 풀어본 투포인터 문제다. 개념은 알고 있었는데, 막상 구현하려 하니 수월하게 되지는 않았다.
CODE
import sys
read=sys.stdin.readline
n=int(read())
num=list(int(read()) for _ in range(n))
num.sort()
cnt=1
for i in range(n-1):
for j in range(i+1,n):
if num[j]-num[i]>=5:break
cnt=max(j-i+1,cnt)
if cnt>4: print(0)
else: print(5-cnt)
귀여운 라이언
앞에서 푼 투포인터 문제보다 시간이 배로 걸렸다. 다음주 까지 투포인터 문제도 집중적으로 풀어봐야겠다. 풀긴 풀었는데 코드가 이상하게 길고, 조금 비효율적인 것 같다.
CODE
import sys
read=sys.stdin.readline
n,k=map(int,read().split())
if k ==0:
print(0)
sys.exit()
num=list(map(int,read().split()))
l,r,cnt=0,0,0
for i in range(n):
if num[i]==1:
l=i
break
tmp=0
for i in range(i,n+1):
if i == n:
print(-1)
sys.exit()
if num[i]==1: tmp+=1
if tmp==k:
r=i
break
answer=r-l+1
flag=1
while flag==1:
for i in range(l+1,n):
if num[i]==1:
l=i
break
for i in range(r+1,n+1):
if i == n:
flag=2
break
if num[i]==1:
r=i
break
if flag==1: answer=min(answer,r-l+1)
if answer < 2147000000:
print(answer)
else: print(-1)
풀어야 할 문제
- 스타트 택시
- 미네랄
- 회전 초밥
- 아기 상어
- 전깃줄 -2
- 치즈