Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 5525๋ฒˆ - IOIOI (C++)

moaoh 2023. 9. 10. 23:19

 

5525๋ฒˆ: IOIOI

N+1๊ฐœ์˜ I์™€ N๊ฐœ์˜ O๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉด, I์™€ O์ด ๊ต๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๋ฌธ์ž์—ด์„ PN์ด๋ผ๊ณ  ํ•œ๋‹ค. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O๊ฐ€ N๊ฐœ) I์™€ O๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด S์™€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, S์•ˆ์— PN์ด ๋ช‡

www.acmicpc.net

 

 

๋ฌธ์ œ

N+1๊ฐœ์˜ I์™€ N๊ฐœ์˜ O๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉด, I์™€ O์ด ๊ต๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๋ฌธ์ž์—ด์„ PN์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • P1 IOI
  • P2 IOIOI
  • P3 IOIOIOI
  • PN IOIOI...OI (O๊ฐ€ N๊ฐœ)

I์™€ O๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด S์™€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, S์•ˆ์— PN์ด ๋ช‡ ๊ตฐ๋ฐ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” S์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง€๋ฉฐ, ์…‹์งธ ์ค„์— S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

 

 

์ถœ๋ ฅ

S์— PN์ด ๋ช‡ ๊ตฐ๋ฐ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

์ œํ•œ

  • 1 ≤ N ≤ 1,000,000
  • 2N+1 ≤ M ≤ 1,000,000
  • S๋Š” I์™€ O๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

 

์„œ๋ธŒํƒœ์Šคํฌ

๋ฒˆํ˜ธ๋ฐฐ์ ์ œํ•œ
1 50 N ≤ 100, M ≤ 10 000.
2 50 ์ถ”๊ฐ€์ ์ธ ์ œ์•ฝ ์กฐ๊ฑด์ด ์—†๋‹ค.

 

 

 

ํ’€์ด๊ณผ์ •

์ด ๋ฌธ์ œ๋Š” ์ •๋ง ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ์ ‘๊ทผ์„ ํ•ด๋ดค๋˜ ๊ฑฐ ๊ฐ™๋‹ค.

๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด s(๋ฌธ์ž์—ด)์•ˆ์— ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค๋ณด๋‹ˆ 

ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ๋‹ค ๋Œ€์ž…ํ•ด๋ณด๋Š” ๋ฐฉ์‹๊ณผ KMP๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฐฉ์‹ ๋ชจ๋‘๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์•˜์—ˆ๋‹ค.

 

1. ์ฒ˜์Œ์—๋Š” ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ๋‹ค ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹

2. KMP๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

1๋ฒˆ ๋ฐฉ๋ฒ•๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ ๊ฑฐ๋ผ๋Š”๊ฑด ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ

2๋ฒˆ ๋ฐฉ๋ฒ•๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋„˜์–ด์„ค๊ฑฐ๋ฆฌ๋Š”๊ฑฐ๋Š” ์ƒ๊ฐํ•˜์ง€๋ชปํ•˜์˜€๋‹ค.

 

๊ทธ๋ž˜์„œ ์•Œ์•„๋‚ธ ๋ฐฉ๋ฒ•์ด

3. S๋ฌธ์ž์—ด 1๋ฒˆ๋งŒ ๋„๋Š” ๋ฐฉ๋ฒ•

์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด ์ž์ฒด๊ฐ€  "IOI..." ํ˜•์‹์œผ๋กœ ๋ฐ˜๋ณต์ด ๋˜๋‹ค๋ณด๋‹ˆ

๊ทธ์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด์—ˆ๋‹ค.

code

#include <iostream>
#include <string>

int		main(void)
{
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);

	int n, m, count, k;
	std::string str;
	
	std::cin >> n >> m >> str;
	count = 0;
	for (int i = 0; i < m; i++) {
		if (str[i] == 'I') {
			k = 0;
			while (str[i + 1] == 'O' && str[i + 2] == 'I')
			{
				k++;
				if (k == n) {
					k--;
					count++;
				}
				i += 2;
			}
		}
	}
	std::cout << count << "\n";

	return (0);
}

 

ํ›„๊ธฐ

๊ณ ์ƒํ•ด์„œ KMP๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๊ณ  ๋ฌธ์ œํ•ด๊ฒฐ์— ๋Œ€์ž…๊นŒ์ง€ ํ–ˆ์—ˆ๋Š”๋ฐ

KMP์กฐ์ฐจ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋‹ˆ ์•ฝ๊ฐ„ ํ—ˆ๋ฌดํ•ด์กŒ๋˜ ๋ฌธ์ œ๊ฐ™๋‹ค.

3๋ฒˆ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค๋‹ˆ..