Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2531 ํšŒ์ „ ์ดˆ๋ฐฅ(ํŒŒ์ด์ฌ/python)

chjcoder 2023. 8. 23. 15:52

๐ŸŽˆ๋ฌธ์ œ

https://www.acmicpc.net/problem/2531

 

๐ŸŽ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ์ ‘๊ทผ

๋ธŒ๋ฃจํŠธํฌ์Šค

1. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํƒ์ƒ‰ํ•ด ๋ณด์•„์•ผํ•œ๋‹ค.

2. ์ด๋•Œ, 2์ค‘ for๋ฌธ๊ณผ set์„ ํ™œ์šฉํ•ด์„œ ํƒ์ƒ‰ํ–ˆ์œผ๋‚˜ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

3. defaultdict๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” set์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , for๋ฌธ ํ•˜๋‚˜๋กœ ํƒ์ƒ‰ ๊ฐ€๋Šฅํ–ˆ๋‹ค.

 

๐Ÿ’ป์ •๋‹ต ์ฝ”๋“œ

# 2531 ํšŒ์ „ ์ดˆ๋ฐฅ

from collections import defaultdict
# import sys
# input = sys.stdin.readline()

n,d,k,c = map(int,input().split())
sushi = [int(input()) for _ in range(n)]
eat = defaultdict(int)
eat[c] += 1 # ์ฟ ํฐ์œผ๋กœ ๋ฐ›์€ ์ดˆ๋ฐฅ์€ ๋จน์€ ๊ฒƒ์œผ๋กœ ์ดˆ๊ธฐํ™”

# ์ดˆ๊ธฐ k๊ฐœ์˜ ์ดˆ๋ฐฅ ๋จน์€ ๊ฒƒ์œผ๋กœ ์„ค์ • ํ›„ ์‹œ์ž‘
for i in range(k):
    eat[sushi[i]] += 1
answer = len(eat)   # ์ดˆ๋ฐฅ ์ตœ์†Œ ๊ฐœ์ˆ˜ ์ดˆ๊ธฐํ™”

for i in range(n):
    # ์œ„์—์„œ 0~k๋ฒˆ์„ ๊ณจ๋ž๋‹ค๋ฉด 1~(k+1)๋ฒˆ์„ ๊ณ ๋ฅด๊ธฐ ์œ„ํ•ด 0๋ฒˆ ์ดˆ๋ฐฅ์„ ๋นผ์คŒ
    eat[sushi[i]] -= 1
    # ํ•ด๋‹น ์ดˆ๋ฐฅ์ด 0๊ฐ’์ด ๋˜๋ฉด ์•ˆ๋จน์€ ๊ฒƒ์ด ๋˜๋ฏ€๋กœ dictionary์—์„œ ๋นผ์คŒ
    if eat[sushi[i]] == 0: 
        del eat[sushi[i]]   # dictionary์˜ ๊ธธ์ด๋กœ ์ดˆ๋ฐฅ ์ข…๋ฅ˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ฏ€๋กœ ์ œ๊ฑฐ

    eat[sushi[(i+k)%n]] += 1    # (k+1)๋ฒˆ ์ดˆ๋ฐฅ ์ถ”๊ฐ€

    answer = max(answer,len(eat))   # ์ตœ๋Œ€ ์ดˆ๋ฐฅ ๊ฐœ์ˆ˜ ๊ฐฑ์‹ 

print(answer)

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

์ฃผ์„์œผ๋กœ ์„ค๋ช…์€ ๋Œ€์ฒดํ•œ๋‹ค.

 

 

โ— ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ

# 2531 ํšŒ์ „ ์ดˆ๋ฐฅ -> ์‹œ๊ฐ„ ์ดˆ๊ณผ

# import sys

# input = sys.stdin.readline()

n,d,k,c = map(int,input().split())
sushi = [int(input()) for _ in range(n)]
cnt = 0

for i in range(n):
    combi = set()

    for j in range(i,i+k):
        combi.add(sushi[j%n])

    len_combi = len(combi)

    if c in combi:
        cnt = max(cnt,len_combi)
        continue
    cnt = max(cnt,len_combi+1)

print(cnt)