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)