프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 2531 회전 초밥 Python

중규리 2024. 1. 22. 12:36

🐸 문제 정보

 

2531번: 회전 초밥

첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤

www.acmicpc.net

 

🤖 알고리즘

슬라이딩 윈도우

 

⏱️ 풀이 시간

30m +

(체크를 못했다...)

 

📝 풀이

조금 신기한..? 이상한..? 문제였다.

슬라이딩 윈도우로 푸는데, 조건문으로 검사하지 않고 모든 경우에서 적용할 수 있도록 코드를 작성하면 시간초과가 발생했다.

틀린 코드는 아래에서 볼 수 있다.

더보기
import sys
input = sys.stdin.readline

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

for i in range(n):
    res = max(res, len(set(table[i:i+k] + table[:(i+k) % n] + [c])))

print(res)

사실 이렇게 풀면 같은 로직임에도 코드가 훨씬 간결해지는데...

이상하게도 모든 조건을 다 나누어 해결해야 올바르게 통과할 수 있었다.

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

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

for i in range(n):
    if i + k > n:
        tmp = len(set(table[i:n] + table[:(i+k) % n] + [c]))
    else:
        tmp = len(set(table[i:i+k] + [c]))
    if res < tmp:
        res = tmp

print(res)

'PS > 문제풀이' 카테고리의 다른 글

백준 2631 줄세우기 Python  (1) 2024.01.22
백준 5972 택배 배송 Python  (1) 2024.01.22
백준 3758 KCPC Python  (1) 2024.01.22
백준 1253 좋다 Python  (1) 2024.01.21
백준 20922 겹치는 건 싫어 Python  (1) 2024.01.21