๋ฐฑ์ค 1593
๋ฌธ์
๋ง์ผ ๋ฌธ์๋ฅผ ํด๋ ํ๋ ์ผ์ ์์ ์ธ๋ก ์ด๋ ค์ด ์ผ์ด๋ค. ํ์ฌ์๋ ๋ป์ด ์์ ํ ๋ฐํ์ง ๋ง์ผ ๋ฌธ์๋ ๊ฑฐ์ ์๋ ์ค์ ์ด๋ฉฐ, ๊ทธ๋๋ง ํด๋ ์ ์ง์ฒ์ด ์์๋ ์ง๋ 30์ฌ ๋ ๋ ๋์ง ์์๋ค.
๋ง์ผ ๋ฌธ์๋ ์๋ฆฌ๋ฅผ ๋ํ๋ด๋ ์ฌ๋ฌ ์ข ๋ฅ์ ๊ทธ๋ฆผ๊ธ์๋ก ๊ตฌ์ฑ๋๋๋ฐ, ์ด ๊ธ์๋ค์ด ์ฌ๋ฌ ์์น์์ ๊ฒฐํฉํจ์ผ๋ก์จ ๋จ์ด๋ฅผ ํ์ฑํ๋ค.
๋ง์ผ ๋ฌธ์ ํด๋ ์ ์ด๋ ต๊ฒ ํ๋ ์์ธ ์ค ํ๋๋ ๋ฐ๋ก ๋จ์ด๋ฅผ ์ฝ๋ ์์์ด๋ค. ๋ง์ผ ๋ฌธ์๋ฅผ ์ฐ๋ ๊ณ ๋์ธ๋ค์ ๋จ์ด๋ฅผ ๊ธฐ๋กํ ๋ ํน์ ํ ๊ท์น ๋์ , ๊ทธ๋ค์ด ๋ณด๊ธฐ์ ์ข๊ฒ ๋ณด์ด๋๋ก ๋จ์ด๋ฅผ ์ด๋ฃจ๋ ๊ธ์๋ค์ ์๋ฌด๋ ๊ฒ๋ ๋ฐฐ์ดํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ณ ๊ณ ํ์๋ค์ด ๋ง์ผ ๊ธฐ๋ก์์ ๋จ์ด๋ฅผ ์ด๋ฃจ๋ ๊ฐ ๊ทธ๋ฆผ๊ธ์๋ค์ ๋ฐ์์ ์์๋ด๋๋ผ๋ ๊ทธ ๋จ์ด๋ฅผ ์ค์ ๋ก ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์ ์๋ ์ ์ด๋ค.
๊ณ ๊ณ ํ์๋ค์ W๋ผ๋ ํน์ ๋จ์ด๋ฅผ ๋ฐ๊ตด ๊ธฐ๋ก์ผ๋ก๋ถํฐ ์ฐพ๊ณ ์๋ค. ๊ทธ ๋จ์ด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ ๊ธ์๋ค์ ๋ฌด์์ธ์ง ์๊ณ ์์ง๋ง, ์ด๊ฒ์ด ๊ณ ๋ ๊ธฐ๋ก์ ์ด๋ค ํํ๋ก ์จ์ด ์๋์ง๋ ๋ค ์์ง ๋ชปํ๋ค.
W๋ฅผ ์ด๋ฃจ๊ณ ์๋ g๊ฐ์ ๊ทธ๋ฆผ๋ฌธ์์, ์ฐ๊ตฌ ๋์์ธ ๋ฒฝํ์ ๊ธฐ๋ก๋ ๋ง์ผ ๋ฌธ์์ด S๊ฐ ์ฃผ์ด์ก์ ๋, ๋จ์ด W๊ฐ ๋ง์ผ ๋ฌธ์์ด S์ ๋ค์ด์์ ์ ์๋ ๋ชจ๋ ๊ฐ์ง์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ฆ, ๋ฌธ์์ด S์์์ ๋ฌธ์์ด W์ ์์ด ์ค ํ๋๊ฐ ๋ถ๋ถ ๋ฌธ์์ด๋ก ๋ค์ด์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ๋ผ๋ ๋ป์ด๋ค.
ํ์ด
S ๋ฌธ์์ด ์์์ ์ฒ์๋ถํฐ ๋๋ฉด์ W์ ์์๊ฐ ์ ๋ถ ์๋์ง๋ฅผ ํ๋จํ๋ฉด ํ๋ฆฐ๋ค.
๋จ์ํ๊ฒ ์ด์คํฌ๋ฌธ์ผ๋ก ๋น๊ตํ๊ฒ ๋๋ค๋ฉด ์ต์์ฐ์ฐ์ ๊ฐ์๊ฐ |S| * |W| ๊ฐ ์ด๋ฏ๋ก 1์ด ํจ์ฌ ๋๊ฒ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก l = 0, r = W.size()-1๋ก ํํํด r์ด W.size()๊ฐ ๋ ๋๊น์ง ํ๋์ฉ ๋๋ ค๊ฐ๋ฉด์ ํ์ธํ๋ฉด |S| * 57('A' ~ 'z' ์์คํค ์ฝ๋ ๊ฐ์)๊ฐ ๊ฑธ๋ ค ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํ ์ ์๊ฒ ๋๋ค.
์ฝ๋
#include <iostream>
#include <string>
using namespace std;
int g, s, ans[58], check[58], ans_num;
string W, S;
int main() {
cin>>g>>s>>W>>S;
for(int i=0; i<W.size(); i++) {
ans[W[i]-'A'] += 1;
}
int l = 0, r = W.size()-1;
for(int i=l; i<=r; i++)
check[S[i]-'A'] += 1;
while(r<S.size()) {
int check_ans = 1;
for(int i=0; i<58; i++) {
if(ans[i] != check[i]) check_ans = 0;
}
if(check_ans) ans_num += 1;
check[S[l]-'A'] -= 1;
l += 1; r += 1;
if(r == S.size()) break;
check[S[r]-'A'] += 1;
}
cout<<ans_num;
}