알고리즘/Baekjoon

5525번:IOIOI

따아앙이 2024. 11. 24. 11:25
https://www.acmicpc.net/problem/5525

 

메모리 : 1968KB

시간 : 12ms

코드길이 : 343B

#include <stdio.h>

int main()
{
	char str[1000001];
	int N, M, val = 0, cnt = 0, ret = 0;
	scanf("%d %d %s", &N, &M, &str);

	for (int i = 2; i < M; i++)
	{
		if (str[i - 2] == 'I' && str[i - 1] == 'O' && str[i] == 'I')
		{
			cnt++;
			if (cnt == N) {
				ret++;
				cnt--;
			}
			i ++;
		}
		else {
			cnt = 0;
		}
	}
	printf("%d", ret);
}

 

메모리 : 1968KB

시간 : 12ms

코드길이 : 585B

#include <stdio.h>

int main()
{
	int N; int M; char str[1000001];
	int val = 0, cnt = 0, ret = 0;
	bool isStart = false;

	scanf("%d %d %s", &N, &M, &str);

	for (int i = 0; i < 2; i++) {
		val <<= 1;
		if (str[i] == 'I') { val += 1; }
	}

	for (int i = 2; i < M; i++)
	{
		val <<= 1;
		
		if (str[i] == 'I') { val += 1; }
		if (val >= 8) { val -= 8; }
		
		if (val == 5) {
			cnt++;
			isStart = true;
			if (cnt == N) {
				ret++;
				cnt--;
			}
		}
		else 
		{
			if (val == 2 && isStart) { continue; }
			else {
				cnt = 0;
				isStart = false;
			}
		}
	}
	printf("%d", ret);
}