algorithm

๋ฐฑ์ค€ 1593

rkawk 2024. 7. 8. 10:23

๋ฌธ์ œ

๋”๋ณด๊ธฐ

๋งˆ์•ผ ๋ฌธ์ž๋ฅผ ํ•ด๋…ํ•˜๋Š” ์ผ์€ ์˜ˆ์ƒ ์™ธ๋กœ ์–ด๋ ค์šด ์ผ์ด๋‹ค. ํ˜„์žฌ์—๋„ ๋œป์ด ์™„์ „ํžˆ ๋ฐํ˜€์ง„ ๋งˆ์•ผ ๋ฌธ์ž๋Š” ๊ฑฐ์˜ ์—†๋Š” ์‹ค์ •์ด๋ฉฐ, ๊ทธ๋‚˜๋งˆ ํ•ด๋…์— ์ง„์ฒ™์ด ์‹œ์ž‘๋œ ์ง€๋Š” 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;
}