https://www.acmicpc.net/problem/2531
2531번: 회전 초밥
첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤
www.acmicpc.net
n, d, k, c = map(int, input().split()) # 접시수/초밥가짓수/연속해서먹는접시수/쿠폰번호
arr = []
ans = 0
for _ in range(n):
num = int(input())
arr.append(num)
for i in range(n):
if i+k > n: # 한바퀴 돌아?
check = len(set(arr[i:n] + arr[:(i+k)%n] + [c]))
else:
check = len(set(arr[i:i+k]+[c]))
if ans < check:
ans = check
print(ans)
- set으로 묶어 len으로 종류의 갯수를 구하는 방법이 있다는 것에 깨달음을 얻었다.
- 처음에 짠 코드가 시간초과가 나서 다른 코드를 참고했다...
- 종류의 갯수를 셀 때 쿠폰인 c를 무조건 포함시켜야됨!
'백준' 카테고리의 다른 글
백준 28353. 고양이 카페 (0) | 2024.02.28 |
---|---|
백준 11725. 트리의 부모 찾기 (0) | 2024.02.28 |
백준 1135. 뉴스 전하기 (0) | 2023.11.07 |
백준 1939. 중량제한 (0) | 2023.11.03 |
백준 1520. 내리막 길 (0) | 2023.11.01 |