โ 15961 ํ์ ์ด๋ฐฅ โ
import sys
input=sys.stdin.readline
from collections import defaultdict
N,d,k,c=map(int,input().split())
kinds=[int(input()) for _ in range(N)]
y,ans,cnt,freq=0,0,0,defaultdict(int)
for x in range(N):
while cnt<k:
if y<N:
cnt+=1
freq[kinds[y]]+=1
y+=1
elif N<=y:
cnt+=1
freq[kinds[(y-1)%(N-1)]]+=1
y+=1
cur_kinds=freq.keys()
if c in cur_kinds:
ans=max(ans,len(cur_kinds))
else:
ans=max(ans,len(cur_kinds)+1)
freq[kinds[x]]-=1
if freq[kinds[x]]==0:
del freq[kinds[x]]
cnt-=1
print(ans)
๐งฆ x์ y ํฌ ํฌ์ธํฐ ๋ชจ๋ ์ฒซ ์ด๋ฐฅ๋ถํฐ ์์ํ๋, k๊ฐ์ ๋ฌถ์๋ง๋ค ์งํํ๋ฏ๋ก(์ฌ๋ผ์ด๋ฉ ์๋์ฐ ํฌ์คํ ์ฐธ์กฐ), x๊ฐ ์ ์ฒด ์ด๋ฐฅ x(1)๋ถํฐ x(8)๊น์ง ์์ง์ผ ๋ y์ ๋์ y(1) ๋ถํฐ y(11)๊น์ง (k=4์ผ ๊ฒฝ์ฐ) ์์ง์ธ๋ค / dictionary ํ์ฉํด freq๋ก ์ข ๋ฅ ๊ฐ์ updateํ๋ฉฐ freq.keys()๋ก ์ค๋ณต ์ด๋ฐฅ ์ฌ๋ถ ๊ฒ์ฌํด c ์ฟ ํฐ ์ฌ์ฉํ๊ฑฐ๋ ์ํ๊ฑฐ๋ ans๊ฐ update (freq dictionary๋ก sushi ์ข ๋ฅ ์์๋ณด๊ธฐ ์๊ฐ ๋จ์ถ)
โ 1806 ๋ถ๋ถํฉ โ
import sys
input=sys.stdin.readline
N,S=map(int,input().split())
ans=100_000
l=list(map(int,input().split()))
cum=0
y=0
length=0
for x in range(N):
while cum<S and y<N:
cum+=l[y]
length+=1
y+=1
if cum>=S:
ans=min(ans,length)
cum-=l[x]
length-=1
if ans == 100_000:
print(0)
else:
print(ans)
๐งฆ x์ y ๋ ํฌ์ธํฐ ๋ชจ๋ ์ผ์ชฝ ๋๋ถํฐ ์์ํ๋ฉฐ, y๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ฉฐ ๋์ ํฉ์ด S์ด์์ด ๋ ๋๊น์ง ์งํ. x๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์, y๊ฐ ์ฒ์๋ถํฐ ์งํํ ํ์ ์์. ๋์ ํฉ์ด๋ฏ๋ก, ๊ธฐ์กด x๊ฐ ๊ฐ๋ฆฌํค๋ ์์๊ฐ ๋น ์ ธ S์ด์์ด ๋ ๋ฆฌ ์๊ธฐ ๋๋ฌธ(ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ). ์๋ ๊ทธ๋ฆผ ์ฐธ์กฐ
: x๊ฐ 5์ผ๋ y๊ฐ 10๊น์ง ์งํ๋์๊ณ (S=15), x๊ฐ ๊ทธ๋ค์ 1๋ก ์งํ๋ ๋, y๊ฐ ๋ค์ 5๋ถํฐ ์ผ์ผ์ด ์งํํ ํ์ ์๋ค. ์ด๋ฏธ ๋ถ๋ถ๋์ ํฉ์ S์ด์์์ ํ์ธํ์๊ณ , ์ฌ๊ธฐ์ 5๋ฅผ ๋บ ํ์ฌ ๋ถ๋ถ๋์ ํฉ์์ ๋ค์ y๊ฐ ์ฒ์๋ถํฐ ์งํํ๋ค๋ฉด S์ด์์ด ๋ ๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ(์ด์ x์ผ ๋ y๊ฐ ๋๋ฉด์ ์์ y๋ S์ดํ์์ ์ฆ๋ช ํ์๊ธฐ์) ๋ฐ๋ผ์ x์ y๋ชจ๋ array๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๊ฐ๊ฐ ํ๋ฒ๋ง ๋๊ธฐ ๋๋ฌธ์ O(N+N)
โ 1644 ์์์ ์ฐ์ํฉ โ
def get_sieve(n):
if n == 1:
return []
elif n == 2:
return [2]
elif n == 3:
return [2,3]
else:
nums=[True]*(n+1)
nums[1]=False
end=int(n**(1/2))
for x in range(2,end+1):
if nums[x]: #if True
for y in range(x,n+1,x):
nums[y]=False
nums[x]=True
return [i for i in range(2,n+1) if nums[i]]
N=int(input())
primality_numbers=get_sieve(N)
l=len(primality_numbers)
y=0
cursum=0
ans=0
for x in range(l):
while y<l and cursum<N:
cursum+=primality_numbers[y]
y+=1
if cursum==N:
ans+=1
cursum-=primality_numbers[x]
print(ans)
๐งฆ ์๋ผํ ์คํ ๋ค์ค ์ฒด๋ก N๊น์ง์ ์์๋ง ๊ตฌ์ฑ๋์ด ์๋ sieve๋ฅผ ๊ตฌํ ๋ค, ์ 1806 ๋ถ๋ถํฉ ๋ฌธ์ ์ ๋์ผํ๊ฒ ๋ถ๋ถ๋์ ํฉ์ด N์ด ๋๋ ์ง ํ์ธ. x๊ฐ ์ฆ๊ฐํ๋ ๊ณผ์ ์์ y๊ฐ 0๋ถํฐ ์ฐจ๋ก๋๋ก ์ ๊ฒํ ํ์ ์์ผ๋ฏ๋ก(ํฌ ํฌ์ธํฐ) ์ฝ๊ฒ O(N+N)
โ 2470 ๋ ์ฉ์ก โ
import sys
input=sys.stdin.readline
N=int(input())
l=list(map(int,input().split()))
l.sort()
ans=2_000_000_001
x,y=0,(N-1)
ans_liquid=[]
while x<y:
total=(l[x]+l[y])
if abs(total) < ans:
ans=abs(total) #ans update
ans_liquid=[l[x],l[y]]
if total > 0:
y-=1
else:
x+=1
print(*ans_liquid)
๐งฆ ์ ๋ ฌ ๋ค, ๋ ์ฉ์ก์ ํฉ total์ด ์์๋ผ๋ฉด, 0์ ๋ ๊ฐ๊น๊ฒ ํ๊ธฐ ์ํด y๋ฅผ ์ผ์ชฝ์ผ๋ก, ์์๋ผ๋ฉด 0์ ๋ ๊ฐ๊น๊ฒ ํ๊ธฐ ์ํด x๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋. ์ ๋ ฌ๋์์ผ๋ฏ๋ก ์ ์ฒด ๋ฐ๋ณต๋ฌธ์ ๋ ํ์๋ ์๋ค (์ด๋ฏธ ๋ ํฌ๊ฑฐ๋ ์์ ๊ฒ ์๋ช ํ๋ฏ๋ก)
โ 2467 ์ฉ์ก โ
import sys
input=sys.stdin.readline
N=int(input())
l=list(map(int,input().split()))
ans=2_000_000_001
x,y=0,(N-1)
ans_liquid=[]
while x<y:
total=(l[x]+l[y])
if abs(total) < ans:
ans=abs(total) #ans update
ans_liquid=[l[x],l[y]]
if total > 0:
y-=1
else:
x+=1
print(*ans_liquid)
๐งฆ ์ 2470 ๋ฌธ์ ์์ ์ ๋ ฌ๋ง ๋์ด์์ผ๋ฏ๋ก ์ ๋ ฌ๋ง ์๋ต.
โ 2473 ์ธ ์ฉ์ก โ
import sys
input=sys.stdin.readline
N=int(input())
arr=sorted(list(map(int,input().split())))
final_ans=100_000_000_000_000_000
for x in range(N):
#find if y+z gets close to target
ans=100_000_000_000_000_000
target=(-arr[x])
y,z=x+1,N-1
while y<z:
total=arr[y]+arr[z]
if abs(total - target) < ans:
ans = abs(total - target)
if abs(arr[x]+total)< final_ans:
final_ans=abs(arr[x]+total)
ans_x_y_z=[arr[x],arr[y],arr[z]]
if total > target:
z-=1
else:
y+=1
print(*sorted(ans_x_y_z))
๐งฆ x๊ณ ์ ํ๊ณ y์ z๋ฅผ x+1, N-1๋ก ์ค์ ํด์ ์์ชฝ์์ ์ค๊ฐ์ผ๋ก ์์ง์ด๋ฉด์ ์ BOJ 2470 ๋ ์ฉ์ก ๋ฌธ์ ์ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ๊ทธ๋๋ก ์ฌ์ฉ. ์ด ๋ ๋ ์ฉ์ก์ ํฉ์ 0์ด ์๋ -arr[x]์์ ์ฐจ์ด์ ๋ ๊ฐ๊น์ด์ง๋ฅผ ๋ฐ์ ธ์ผ ํ๊ณ , ๋ ์ฉ์ก์ ํฉ์ด -arr[x]๋ณด๋ค ํฐ ์ง, ์์ ์ง์ ๋ฐ๋ผ ๋ ํฌ์ธํฐ ์ด๋ ๊ธฐ์ค ์ ํ๋ฉด ๋๋ค.
โ 13144 List of Unique Numbers โ
import sys
input=sys.stdin.readline
N=int(input())
l=list(map(int,input().split()))
y=0
ans=0
kinds=set()
for x in range(N):
ans+=(y-x)
while y<N and l[y] not in kinds:
kinds.add(l[y])
ans+=1
y+=1
kinds.discard(l[x])
print(ans)
๐งฆ y๊ฐ 1๋ก ๋ฉ์ถ ์ํ์์ x๊ฐ 2๋ก ์์ง์์ ๋, ์ด์ฐจํผ ์งํํ ๋ถ๋ถ๊น์ง๋ ์ด๋ฏธ ๋ชจ๋ ์ค๋ณต๋ ์์๊ฐ ์์์ด ์ฆ๋ช ๋์์ผ๋ฏ๋ก(๊ทธ๋ฌ๋๊น y๊ฐ ์ด๋ํ ๊ฒ์ด๋ฏ๋ก) x๊ฐ 2์ผ ๋ 2๋ก ์์ํ๋ ๋ถ๋ถ์ฐ์์์ด(์ค๋ณต ์๋ ์์) [2], [2,3]์ ๊ฐ์ y-x๋ก ๊ตณ์ด y ๋ค์ ์์์ ์ถ๋ฐ ํ์ ์์ด ans์ ์๋์ผ๋ก ๊ฐ์ ๋ํ๋ฉด ๋๋ค.
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Implementation&Simluation Upper-Advanced I - 1 Solvedโ (0) | 2024.03.03 |
---|---|
โ Stack & Queue & Deque Advanced I - 1 Solvedโ (0) | 2024.02.24 |
โ Implementation&Simluation Advanced I - 5 Solvedโ (0) | 2024.01.28 |
โ Backtracking Upper-Advanced I - 1 Solvedโ (0) | 2024.01.24 |
โ Backtracking Advanced I - 3 Solvedโ (1) | 2024.01.21 |
๋๊ธ