[BAEKJOON] 2531번 회전초밥

2024. 3. 21. 18:18·Algorithm/투포인터

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

 

2531번: 회전 초밥

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

www.acmicpc.net

문제조건
  1.  k개의 접시 연속해서 먹으면 정액할인 가격
  2. 1번에 해당할때, 초밥 번호 쿠폰발행, 그 번호 공짜, 번호 없으면 새로 만들어줌
  3. 손님이 먹을 수있는 초밥종류의 최댓값?

가장 많이 먹을 수 있는 경우? 쿠폰발행된 것이 아닌 초밥들을 연속해서 먹는다.

 

뭔가 투포인터를 이용해서 풀어야만 할 것같았는데, 투포인터를 활용한  '슬라이딩 윈도우' 기법을 활용했다.

거창해 보이지만 단순하게 말하면 창문을 밀고 당길때, 창문의 길이는 계속 일정한 것과 같이, 탐색하고자하는 길이는 고정 시키고, 전체 배열을 탐색할 수 있는 기법이다.

 

원형으로 찾아야하므로, n으로 나눈 나머지로 구해줬고, k개를 연속으로 먹는 경우이므로 k개를 슬라이딩 윈도우로 탐색해줬다. 또한 처음부터 쿠폰이있다고 가정해서 coupon = 1로 두고, 만약 k개안에 쿠폰이 나온다면 coupon = 0 으로 변경했다.

#include <iostream>
#include <vector>
#include <string.h>
using namespace std;

// 1. k개의 접시 연속해서 먹으면 정액할인 가격
// 2. 1번에 해당할때, 초밥 번호 쿠폰발행, 그 번호 공짜, 번호 없으면 새로 만들어줌

vector<int> v;
int n, d, k, c, visited[3001];

int main() {
	cin >> n >> d >> k >> c;
	for (int i = 0; i < n; i++) {
		int rice;
		cin >> rice;
		v.push_back(rice);
	}
	int flag = 0, coupon = 0, res = 0;
	//슬라이딩 윈도우
	for (int i = 0; i < n; i++) {
		flag = 0;
		coupon = 1;
		for (int j = i; j < i + k; j++) {
			//이미 있던 초밥(중복)
			if (visited[v[j % n]] == 1) flag++;
			//처음 등장한 초밥
			else visited[v[j % n]] = 1;
			//쿠폰일경우
			if (v[j % n] == c) coupon = 0;
		}
		res = max(res, k - flag + coupon);
		memset(visited, 0, sizeof(visited));
	}
	cout << res;
}

굿,,!

'Algorithm > 투포인터' 카테고리의 다른 글

[BAEKJOON] 20437번 문자열 게임2  (1) 2024.05.21
[BAEKJOON] 1522번 문자열 교환  (0) 2024.05.20
[BAEKJOON] 20922번 겹치는 건 싫어  (0) 2024.03.21
'Algorithm/투포인터' 카테고리의 다른 글
  • [BAEKJOON] 20437번 문자열 게임2
  • [BAEKJOON] 1522번 문자열 교환
  • [BAEKJOON] 20922번 겹치는 건 싫어
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
[BAEKJOON] 2531번 회전초밥
상단으로

티스토리툴바