회전 초밥

문제 요약

회전 초밥 벨트에서 연속으로 K 개의 접시를 먹을 때, 중복되지 않는 초밥 종류의 최대 개수를 구하되, 쿠폰으로 제공되는 초밥(c번 초밥)을 하나 더 먹을 수 있다면 포함시킨다. 벨트는 원형이므로 끝에서 시작으로 이어진다.


적용 알고리즘

이 문제는 연속된 구간의 정보를 빠르게 갱신 해야 하므로 슬라이딩 윈도우 가 적합하다.

특정 범위의 초밥 종류 수를 효율 적으로 관리하기 위해 Map 또는 배열 을 이용한 카운팅 을 사용한다.


Java 코드


요약

  1. 슬라이딩 윈도우를 이용해 연속 구간을 탐색

  2. 초밥 중복을 count 배열로 관리

  3. 쿠폰 초밥은 항상 포함 여부를 확인하여 + 1 처리

  4. 원형 벡트를 인덱스 %N 으로 처리하여 회전 구현

Last updated