[๋ฐฑ์ค] IOIOI
[๋ฐฑ์ค] IOIOI
ํ์ด
๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
-
N+1 ๊ฐ์ โIโ ์ N ๊ฐ์ โOโ ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์์ ๋, ์ด ๋ฌธ์์ด์ $ P_{N} $ ์ด๋ผ๊ณ ํ๋ค.
-
I์ O๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด S์ ์ ์ N์ด ์ฃผ์ด์ง ๋, S์์ ๋ค์ด์๋ $ P_{N} $ ํจํด์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ค.
# 50์
n = int(input())
M = int(input())
S = input()
pn = "IO"*n + "I"
cnt = 0
while S.find(pn) > -1:
S = S[S.find(pn)+2:]
cnt += 1
print(cnt)
# ์ ๋ต
N = int(input())
M = int(input())
S = input()
count = 0
cnt = 0
i = 1
while i < M - 1:
if S[i-1] == "I" and S[i] == "O" and S[i+1] == "I":
count += 1
if count == N:
count -= 1
cnt += 1
i += 1
else:
count = 0
i += 1
print(cnt)
์ค์ ๋ฐ ๋ฐฐ์ด ์
-
์ฒซ๋ฒ์งธ ๋ง๋ค์๋ ๋ฐฉ๋ฒ์ ์ฌ๋ผ์ด์ฑ์ ์ด์ฉํด์ โ์โ์์ ๋ถํฐ ๋ฌธ์์ด์ ๋์ด์คฌ๋ค.
PN = โIOIโ ๋ผ๊ณ ํ ๋, S =IOIOIOIIIOO ๋ผ๊ณ ํ๋ค๋ฉด,
์์๋ฆฌ์ธ โIOโ ๋ฐ๋ณต๋๊ธฐ ๋๋ฌธ์,
find๋ฅผ ์ด์ฉํด์ PN๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด ์๋ index๋ฅผ ์ฐพ๊ณ cnt๋ฅผ ์ฌ๋ฆด ์ ์๋๋ก ํ๋ค.
1) IOIOIOIIIOO, cnt = 1
2) IO(์๋ฆ) IOIOIIIOO, cnt = 2
3) IOIO(์๋ฆ) IOIIIOO, cnt = 3
์ด๋ฐ์์ผ๋ก ์๋ฅด๋ฉด์ ๊ฐฏ์๋ฅผ ์ ์ ์๋๋ก ํ๋ค.
ํ์ง๋ง, ์๊ฐ ์ด๊ณผ! -
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ๊ตฌ๊ธ๋งํ๋ฉด์ ์ฐพ์ ์ ์์๋ค.
์์ ๊ฐ์ ๋ฌธ์ ๋ผ ๊ฐ์ ํ์ ๋,
index๋ฅผ ๊ธฐ์ค์ผ๋ก ์ข์ฐ๋ฅผ ํ์ธํ ๋ค์์ PN์ด ์๋ โIOIโ์ ์ฐพ๋๋ค.
ํจํด์ ์ฐพ๋๋ค๋ฉด, index + 2๋ฅผ ํ๋ฉด์ PN๊ณผ ๊ฐ์ ํจํด์ด ๋ ๋ ๊น์ง ์ฐพ๋๋ค.
PN์ ์ฐพ๋๋ค๋ฉด count๋ฅผ N-1 ๊ฐ๋ก ๋ง๋ค์ด์ฃผ๊ณ index + 2๋ฅผ ํด์ ๊ทธ ๊ธฐ์ค์ผ๋ก ์ข์ฐ์ IOI๊ฐ ์๋ ์ง ํ์ธํ๋ฉด์ PN์ ์ฐพ๋๋ค.
์ฆ, ํจํด์ด IOI๊ฐ ๋ฐ๋ณต๋๋ค๋ ๊ฒ์ ์ด์ฉํ๋ค.1) IOIOIOIIIOO, cnt = 1
2) IOIOIOIIIOO, cnt = 2
3) IOIOIOIIIOO, cnt = 3 -
๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๋ผ๋ฉด, PN์ ์ฐพ๋ ๊ฒ๊ณผ โIOIโ๋ผ๋ ํจํด์ ์ฐพ๋ ๊ฒ์ ์ฐจ์ด์ธ ๊ฒ ๊ฐ๋ค.
๋ด ์์์ผ๋ก๋ PN์ด ๋๋ฌด ๊ธธ๋ฉด find๋ฅผ ํตํด ํจํด์ ์ฐพ์ ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋จ๋ ๊ฒ ๊ฐ๋ค.
์ฌ๋ผ์ด์ฑ์ IOI๋ง์ ์ด์ฉํด์ ํ์ด๋ ๋ ๊ฒ ๊ฐ๋ค. -
KMP ์๊ณ ๋ฆฌ์ฆ ํ์ฉ ๋ฐฉ๋ฒ ์ฐพ์๋ณด๊ธฐ