30분 동안 시도했던 풀이는 다음과 같다. 테스트 케이스는 맞았는데 제출하니 틀렸다고 뜨더라. 예외 케이스가 처리되지 않은 것 같다.
import sys
from collections import defaultdict
input = sys.stdin.readline
N, d, k, c = map(int, input().split())
sushi_arr = []
for _ in range(N):
element = int(input())
sushi_arr.append(element)
sushi = defaultdict(lambda: 0)
sushi_count = 0
for i in range(k):
current_sushi = sushi_arr[i]
if sushi[current_sushi] == 0:
sushi_count += 1
sushi[current_sushi] += 1
if sushi[c] == 0:
sushi_count += 1
max_sushi_count = sushi_count
for left in range(1, N):
popped_sushi = sushi_arr[left-1]
added_sushi = sushi_arr[(left+k-1)%N]
sushi[popped_sushi] -= 1
if sushi[popped_sushi] == 0:
sushi_count -= 1
sushi[added_sushi] += 1
if sushi[added_sushi] == 1:
sushi_count += 1
sushi[c] += 1
if sushi[c] == 1:
sushi_count += 1
max_sushi_count = max(sushi_count, max_sushi_count)
print(max_sushi_count)
1년 전에 이 문제를 맞춘 기록이 있길래 참고해봤다. 전반적인 풀이 방법은 위랑 비슷했는데, 다만 c(서비스로 주어지는 초밥)의 값을 1로 세팅해 두는 것이 차이였다.
나의 경우는 for문 안에서 이 c의 경우를 처리하려다 보니 로직이 더 복잡했고, 그래서 일부 케이스에서 오류가 나지 않았을까 추측해 본다.
import sys
from collections import defaultdict
input = sys.stdin.readline
N, d, k, c = map(int, input().split())
sushi_arr = []
for _ in range(N):
element = int(input())
sushi_arr.append(element)
sushi = defaultdict(lambda: 0)
sushi[c] = 1
sushi_count = 1
for i in range(k):
current_sushi = sushi_arr[i]
if sushi[current_sushi] == 0:
sushi_count += 1
sushi[current_sushi] += 1
max_sushi_count = sushi_count
for left in range(1, N):
popped_sushi = sushi_arr[left-1]
added_sushi = sushi_arr[(left+k-1)%N]
sushi[popped_sushi] -= 1
if sushi[popped_sushi] == 0:
sushi_count -= 1
sushi[added_sushi] += 1
if sushi[added_sushi] == 1:
sushi_count += 1
max_sushi_count = max(sushi_count, max_sushi_count)
print(max_sushi_count)
'알고리즘' 카테고리의 다른 글
[백준/파이썬] #13549 (0) | 2025.04.01 |
---|---|
[백준/파이썬] #22945 (0) | 2025.03.31 |
[백준/파이썬] #1806 (0) | 2025.03.28 |
[백준/파이썬] #22862 (0) | 2025.03.27 |
[백준/파이썬&자바] #2470 (0) | 2025.03.26 |