[백준/BOJ][Python] 2531번 회전 초밥

Eunding·2024년 11월 15일
0

algorithm

목록 보기
33/107

2531번 회전 초밥

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


아이디어

  1. sushi 리스트 입력받기
  2. 회전초밥이므로 앞에 있는 초밥 (k-1)개를 sushi 리스트에 append
    이유 : k개씩 훑으므로 마지막 인덱스부터 k개를 보기위해
  3. sushi_selected boolean 리스트를 만들어서 초밥을 먹는다면 True로 바꾸기
  4. k개씩 훑으면서 쿠폰 초밥(c)이 포함되어있다면 flag 변수 True
    (만약 flag가 False라면, 쿠폰 초밥 없으므로 쿠폰 초밥을 서비스로 줌. 즉, answer + 1)

회전 초밥인 점을 간과해서 한 번 틀렸던 문제이다.
반례 예시)

8 4 3 4
1
2
1
1
1
1
1
3

ans = 4


코드

n, d, k, c = map(int, input().split())
sushi = []
answer = 0

for _ in range(n):
    sushi.append(int(input()))

for i in range(k-1):
    sushi.append(sushi[i]) # 회전초밥이므로

sushi_selected = [False]*(d+1)
for i in range(0, n):
    flag = False # 쿠폰 초밥 있는지
    for j in range(i, i+k):
        sushi_selected[sushi[j]] = True
        if sushi[j] == c: flag = True

    if answer <= sushi_selected.count(True):
        answer = sushi_selected.count(True)
        if not flag:
            answer += 1

    sushi_selected[sushi[i]] = False

print(answer)

0개의 댓글