์๋ ํ์ธ์, ์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 5525๋ฒ ๋ฌธ์ ์ธ “IOIOI” ๋ฌธ์ ๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ๋ฌธ์์ด์์ ํน์ ํจํด์ด ๋ช ๋ฒ ๋ํ๋๋์ง ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค. ํจ๊ป ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ , ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํ, ์ต์ข ์ ์ธ ์ ๋ต ์ฝ๋๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ URL: https://www.acmicpc.net/problem/5525
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• ์ฃผ์ด์ง ๋ฌธ์์ด S์์ ํน์ ํจํด ‘IOI’๊ฐ ๋ฐ๋ณต๋๋ ํ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค.
• ํจํด ‘IOI’๊ฐ N๋ฒ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ์ฐพ์์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, N=1์ผ ๋ ํจํด์ ‘IOI’, N=2์ผ ๋ ํจํด์ ‘IOIOI’์ ๋๋ค.
• ์ฃผ์ด์ง ๋ฌธ์์ด S์์ ์ด๋ฌํ ํจํด์ด ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ๊ณ์ฐํ๋ ๋ฌธ์ ์ ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค์ ํจํด์ ๋ฐ๋ณต ํ์ N์ด ์ฃผ์ด์ง๋๋ค. (1 ≤ N ≤ 1,000,000)
• ๋ ๋ฒ์งธ ์ค์ ๋ฌธ์์ด S์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋๋ค. (2N + 1 ≤ M ≤ 1,000,000)
• ์ธ ๋ฒ์งธ ์ค์ ๋ฌธ์์ด S๊ฐ ์ฃผ์ด์ง๋๋ค.
3) ์ถ๋ ฅ
• ๋ฌธ์์ด S์์ ์ฃผ์ด์ง ํจํด์ด ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ ํจํด์ ๋ฐ๋ณต ํ์ N์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ ๋ฌธ์์ด S์ ๊ธธ์ด M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ์ธ ๋ฒ์งธ ์ค์์ ๋ฌธ์์ด S๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ํจํด ์ฐพ๊ธฐ
• ๋ฌธ์์ด S๋ฅผ ์ํํ๋ฉด์ ‘IOI’ ํจํด์ ์ฐพ์ต๋๋ค.
• ํจํด์ด ๊ฒน์น ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ 2์ฉ ์ ์งํ๋ฉฐ ๊ฒ์ฌํฉ๋๋ค.
• ํจํด์ ์ฐพ์ผ๋ฉด ํจํด์ ๋ฐ๋ณต ํ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ์ํ๋ ๋ฐ๋ณต ํ์์ ๋๋ฌํ๋ฉด ์ ๋ต ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
3) ์ฝ๋ ์ค๋ช
• ์ฒซ ๋ฒ์งธ ์ค์์ ํจํด์ ๋ฐ๋ณต ํ์ N์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ ๋ฌธ์์ด S์ ๊ธธ์ด M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ์ธ ๋ฒ์งธ ์ค์์ ๋ฌธ์์ด S๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ฌธ์์ด S๋ฅผ ์ํํ๋ฉฐ ํจํด์ ์ฐพ๊ณ , ํจํด์ด ๋๊ธธ ๋๋ง๋ค ์นด์ดํธ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
• ์ต์ข ์ ์ผ๋ก ์ฐพ์ ํจํด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# N: IOI ํจํด์ ๋ฐ๋ณต ํ์
N = int(input())
# M: ๋ฌธ์์ด S์ ๊ธธ์ด
M = int(input())
# S: ์ฃผ์ด์ง ๋ฌธ์์ด
S = input()
i = 0 # ํ์ฌ ๋ฌธ์์ด S์์์ ์ธ๋ฑ์ค
pCnt = 0 # IOI ํจํด์ ํ์ฌ ๋ฐ๋ณต ํ์
ans = 0 # ์ฐพ์ ํจํด์ ์ด ๊ฐ์
# ๋ฌธ์์ด์ ๋๊น์ง ๊ฒ์ฌ
while i < (M-1):
# 'IOI' ํจํด์ ์ฐพ์์ ๋
if S[i] == 'I' and S[i+1] == 'O' and S[i+2] == 'I':
pCnt += 1 # IOI ํจํด์ ๋ฐ๋ณต ํ์๋ฅผ ์ฆ๊ฐ
i += 2 # ํจํด์ด ๊ฒน์น๋ฏ๋ก 2์นธ ์ ์ง
# ํจํด์ด N๋ฒ ๋ฐ๋ณต๋๋ฉด ์ ๋ต ์นด์ดํธ ์ฆ๊ฐ
if pCnt == N:
ans += 1
pCnt -= 1 # ์ค๋ณต๋ ํจํด์ ๊ณ ๋ คํ๊ธฐ ์ํด์ pCnt๋ฅผ 1 ๊ฐ์
else:
pCnt = 0 # ํจํด์ด ๋๊ธฐ๋ฉด pCnt๋ฅผ ์ด๊ธฐํ
i += 1 # 1์นธ ์ ์ง
# ์ต์ข
์ ์ผ๋ก ์ฐพ์ ํจํด์ ๊ฐ์ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• ์ฒซ ๋ฒ์งธ ์ค์์ ํจํด์ ๋ฐ๋ณต ํ์ N์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ ๋ฒ์งธ ์ค์์ ๋ฌธ์์ด S์ ๊ธธ์ด M์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ์ธ ๋ฒ์งธ ์ค์์ ๋ฌธ์์ด S๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ๋ณ์ ์ด๊ธฐํ
• i: ํ์ฌ ๋ฌธ์์ด S์์์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ ๋๋ค. ์ด๊ธฐ๊ฐ์ 0์ ๋๋ค.
• pCnt: ํ์ฌ๊น์ง ์ฐพ์ ‘IOI’ ํจํด์ ๋ฐ๋ณต ํ์๋ฅผ ๋ํ๋ ๋๋ค. ์ด๊ธฐ๊ฐ์ 0์ ๋๋ค.
• ans: ์ฐพ์ ํจํด์ ์ด ๊ฐ์๋ฅผ ๋ํ๋ ๋๋ค. ์ด๊ธฐ๊ฐ์ 0์ ๋๋ค.
3) ๋ฌธ์์ด ์ํ ๋ฐ ํจํด ์ฐพ๊ธฐ
• ๋ฌธ์์ด S๋ฅผ ์ํํ๋ฉด์ ‘IOI’ ํจํด์ ์ฐพ์ต๋๋ค.
• ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด S๊ฐ IOIOIOI์ด๊ณ N์ด 2์ธ ๊ฒฝ์ฐ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
1] ์ด๊ธฐ ์ํ
• i = 0, pCnt = 0, ans = 0
2] ์ฒซ ๋ฒ์งธ ํจํด ์ฐพ๊ธฐ
• S[0] == 'I', S[1] == 'O', S[2] == 'I'์ด๋ฏ๋ก ‘IOI’ ํจํด์ ์ฐพ์์ต๋๋ค.
• pCnt += 1 -> pCnt = 1
• i += 2 -> i = 2 (ํจํด์ด ๊ฒน์น ์ ์์ผ๋ฏ๋ก 2์นธ ์ ์ง)
3] ๋ ๋ฒ์งธ ํจํด ์ฐพ๊ธฐ
• S[2] == 'I', S[3] == 'O', S[4] == 'I'์ด๋ฏ๋ก ๋ค์ ‘IOI’ ํจํด์ ์ฐพ์์ต๋๋ค.
• pCnt += 1 -> pCnt = 2 (์ฌ๊ธฐ์ pCnt๋ N๊ณผ ๊ฐ์์ง๋๋ค)
• i += 2 -> i = 4
• pCnt == N์ด๋ฏ๋ก ans += 1 -> ans = 1
• ์ค๋ณต๋ ํจํด์ ๊ณ ๋ คํ๊ธฐ ์ํด pCnt -= 1 -> pCnt = 1
4] ์ธ ๋ฒ์งธ ํจํด ์ฐพ๊ธฐ
• S[4] == 'I', S[5] == 'O', S[6] == 'I'์ด๋ฏ๋ก ๋ค์ ‘IOI’ ํจํด์ ์ฐพ์์ต๋๋ค.
• pCnt += 1 -> pCnt = 2 (์ฌ๊ธฐ์ ๋ค์ pCnt๋ N๊ณผ ๊ฐ์์ง๋๋ค)
• i += 2 -> i = 6
• pCnt == N์ด๋ฏ๋ก ans += 1 -> ans = 2
• ์ค๋ณต๋ ํจํด์ ๊ณ ๋ คํ๊ธฐ ์ํด pCnt -= 1 -> pCnt = 1
5] ๋ ์ด์ ๊ฒ์ฌํ ํจํด์ด ์์ผ๋ฏ๋ก ์ข ๋ฃํฉ๋๋ค.
4) ์ต์ข ๊ฒฐ๊ณผ ์ถ๋ ฅ
• ์ต์ข ์ ์ผ๋ก ์ฐพ์ ํจํด์ ๊ฐ์ ans๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์๊ฐ๋ณต์ก๋
๋ฃจํ๊ฐ ๋ฌธ์์ด S๋ฅผ ํ ๋ฒ ์ํํ๋ฉด์ ๋ชจ๋ ํจํด์ ๊ฒ์ฌํ๋ฏ๋ก, ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ O(M)์ ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 11724[์ฐ๊ฒฐ ์์์ ๊ฐ์] (0) | 2024.07.22 |
---|---|
BOJ(๋ฐฑ์ค) 14891[ํฑ๋๋ฐํด] (0) | 2024.07.20 |
BOJ(๋ฐฑ์ค) 1417[๊ตญํ์์ ์ ๊ฑฐ] (0) | 2024.07.17 |
BOJ(๋ฐฑ์ค) 14503[๋ก๋ด ์ฒญ์๊ธฐ] (0) | 2024.07.16 |
BOJ(๋ฐฑ์ค) 5567[๊ฒฐํผ์] (0) | 2024.07.12 |