โ 3273 ๋ ์์ ํฉ โ
import sys
input=sys.stdin.readline
n=int(input())
l=list(map(int,input().split()))
X=int(input())
#array
l.sort()
#two-pointers
x,y=0,n-1
ans=0
while x<y:
total=l[x]+l[y]
if total == X:
ans+=1
x+=1
y-=1
elif total < X:
x+=1
else: #total > X
y-=1
print(ans)
๐ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ๋ค, x๋ฅผ ๋ฐฐ์ด ์ผ์ชฝ ๋ / y๋ฅผ ๋ฐฐ์ด ์ค๋ฅธ์ชฝ ๋์ ๋ฐฐ์น. l[x]+l[y]๊ฐ X๋ณด๋ค ํด ๊ฒฝ์ฐ, x๋ฅผ ์๋ฌด๋ฆฌ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํด๋ X๋ณด๋ค ํด ์ ๋ฐ์ ์์. ๋ฐ๋ผ์ y๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋ / l[x]+l[y]๊ฐ X๋ผ๋ฉด ์ ๋ต ์ฐพ์! ans+=1 ํ ๋ค, l[x]์ l[y]๋ ์ด์ X ๋์ค๋ ์ฐ์ฐ์ ํ์ ์์ผ๋ฏ๋ก x ์ค๋ฅธ์ชฝ ์ด๋, y ์ผ์ชฝ ์ด๋ / l[x]+l[y]๊ฐ X๋ณด๋ค ์๋ค๋ฉด y๋ฅผ ์๋ฌด๋ฆฌ ์ผ์ชฝ์ผ๋ก ์ด๋ํด๋ ๋ ์์์ง๊ธฐ์ X๋ฅผ ๋ง๋ค์ ์์. ๋ฐ๋ผ์ x๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋. ์ด ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด x๊ฐ 5์ด๊ณ y๊ฐ 9์ผ ๋, ์ด๋ฏธ y๊ฐ ์ง๋์น 10, 11, 12๋ x๊ฐ 5์ผ ๋ ๋ ์ ๊ฒํ ํ์๊ฐ ์๋ค(ํฌ ํฌ์ธํฐ ํน์ง). X์ ๊ฐ๊ฑฐ๋ X๋ณด๋ค ํฌ๋ค๋ฉด ๋น์ฐํ ์ค๋ฅธ์ชฝ y๊ฐ ์ง๋์น ์์๋ค์ ๋ณผ ํ์๊ฐ ์๊ณ , X๋ณด๋ค ์๋ค๋ฉด ๋ต์ ๊ฐ๋ฅ์ฑ์ด ์์ ์๋ ์์ง๋ง, ์ด๋ ์ด๋ฏธ y๊ฐ ๊ธฐ์กด y๋ณด๋ค ๋ ํด ๊ฒฝ์ฐ ์งํ์ ํ๊ธฐ์ ๋ ์ด์ 10, 11, 12๋ฅผ x๊ฐ 5์ผ ๋ checkํ ํ์ ์๋ค. ์๊ฐ๋ณต์ก๋ O(logn+n+n)
โ 2003 ์๋ค์ ํฉ 2 โ
import sys
input=sys.stdin.readline
N,M=map(int,input().split())
l=list(map(int,input().split()))
y=0
cumsum=0
ans=0
for x in range(N):
while y<N and cumsum<M:
cumsum+=l[y]
y+=1
if cumsum==M:
ans+=1
cumsum-=l[x]
print(ans)
๐ก i์ j ๋ชจ๋ ๋ฐฐ์ด ์ผ์ชฝ ๋์ ์ปค์๋ก ๋๊ณ , x ๊ณ ์ ํ ์ํ์์ M์ด ์์ ๋๊น์ง y ๊ณ์ ์ด๋. ์ปค์ง๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ๊ฐ์ ๊ฒฝ์ฐ ans += 1, ๊ทธ ๋ค์ ์ค๋ฅธ์ชฝ์ผ๋ก x ์ด๋ํด์ ํ์ฌ ๋์ ํฉ์์ l[x] ๋นผ๊ธฐ. ๋ฌธ์ ์์ฒด์ A[i] ~ A[j] ์ฌ์ด์ ๋์ ํฉ์ด๋ผ๊ณ ํด์ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ์ ์ ๋น์ฑ ์ฆ๋ช ํ์์์ด ๋ฐ๋ก ํฌ ํฌ์ธํฐ ์ฌ์ฉ
โ 2559 ์์ด โ
import sys
input=sys.stdin.readline
N,K=map(int,input().split())
l=list(map(int,input().split()))
ans=-1_000_000_000
cursum=0
y=0
cnt=0
for x in range(N):
while y<N and cnt<K:
cursum+=l[y]
cnt+=1
y+=1
if cnt==K:
ans=max(ans,cursum)
cursum-=l[x]
cnt-=1
else:
break
print(ans)
๐ก k๊ฐ์ ์ฐ์ํ ๋์ ํฉ์ด๋ฏ๋ก ํฌ ํฌ์ธํฐ ์ฌ์ฉ์ ์ ๋น์ฑ์ ์๋ช . cnt<K์ผ ๋๊น์ง y+=1ํ๋ฉฐ ๋ํด๋๊ฐ๊ณ , cnt==K๋ผ๋ฉด ans update(์ต๋๋ผ๋ฉด)์ ํจ๊ป cursum ๋์ ํฉ์ l[x] ๋นผ๊ณ , cnt-=1. ๋ง์ฝ y๊ฐ ๋ฐฐ์ด ๋์ผ๋ก ์ด๋ํด์ cnt==K์๋๋ผ๋ฉด ๋ ์ด์ ์ฐ์ํด์ ๋์ ํฉ์ ๊ตฌํ ์ ์์ผ๋ฏ๋ก ์ข ๋ฃ
โ 1940 ์ฃผ๋ชฝ โ
import sys
input=sys.stdin.readline
N=int(input())
M=int(input())
l=list(map(int,input().split()))
l.sort()
x,y=0,N-1
cumsum=200_001
ans=0
while x<y:
total=(l[x]+l[y])
if total < M:
x+=1
elif total == M:
ans+=1
x+=1
y-=1
else: #total > M
y-=1
print(ans)
๐ก 3273 ๋ ์์ ํฉ๊ณผ ๋์ผ ์ ํ(ํฌ ํฌ์ธํฐ ์์จ๋ ๋๋ ํฌ ํฌ์ธํฐ๋ก O(N)) ํ์ด)
โ 2531 ํ์ ์ด๋ฐฅ โ
๐ก G4 15961 ํ์ ์ด๋ฐฅ ํ์ด ์ฐธ์กฐ(N ์กฐ๊ฑด ๋ฒ์๊ฐ ๋ ์ปค์ง)
โ 6159 Costume Party โ
import sys
input=sys.stdin.readline
N,S=map(int,input().split())
cows=[int(input()) for _ in range(N)]
cows.sort()
i,j=0,len(cows)-1
ans=0
while i<j:
total=cows[i]+cows[j]
if total > S:
j-=1
else:
ans+=(j-i)
i+=1
print(ans)
๐ก pair ๊ตฌ์ฑ ๋ด์ฉ์ ํฉ์ด S๋ณด๋ค ํฐ pair์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ . ์ง์ n^2์ผ๋ก ๋๋ ค๋ ๋์ง๋ง ์ ๋ ฌ ๋ค, ํฌ ํฌ์ธํฐ๋ก(O(nlogn+n)) ์ฐพ์ ์ ์๋ค. ์ ํฌ์ธํฐ๋ฅผ ์ฒ์๊ณผ ๋์ ๋๊ณ , ํ์ฌ total์ด S๋ณด๋ค ํฌ๋ค๋ฉด j-=1. ๊ทธ๋ ์ง ์๋ค๋ฉด j-i๋ฅผ pair ์๋ก ๋์ ์ ๋ฐ์ดํธ. ๊ทธ๋ฆฌ๊ณ i+=1
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ DP Intermediate II - 2 Solvedโ (0) | 2024.05.26 |
---|---|
โ BFS&DFS Upper-Intermediate I - 16 Solvedโ (1) | 2024.05.12 |
โ Backtracking Upper-Intermediate I - 9 Solvedโ (0) | 2024.01.20 |
โ Backtracking Intermediate I - 10 Solvedโ (0) | 2024.01.18 |
โ Implementation&Simulation Upper-Intermediate I - 3 Solvedโ (0) | 2024.01.08 |
๋๊ธ