BOJ/๐Ÿฅ‡

โ˜…Two-Pointers Advanced I - 7 Solvedโ˜…

metamong 2024. 2. 11.

โ˜… 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์— ์ž๋™์œผ๋กœ ๊ฐœ์ˆ˜ ๋”ํ•˜๋ฉด ๋œ๋‹ค.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€