algorithm

๋ฐฑ์ค€ 31846

rkawk 2024. 6. 24. 23:32

๋ฌธ์ œ

๊ธฐ๋‹ค๋ž€ ์ข…์ด์— ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ํ•œ ์ค„๋กœ ์“ฐ์—ฌ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ข…์ด์— “ABAACA”๊ฐ€ ์“ฐ์—ฌ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

 

์ด์ œ ์ด ์ข…์ด๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ ‘์„ ๊ฒƒ์ด๋‹ค. ์ข…์ด๋Š” ์„œ๋กœ ์ด์›ƒํ•œ ๋ฌธ์ž ์‚ฌ์ด์—์„œ๋งŒ ์ ‘์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์œ„ ์ข…์ด๋ฅผ 4๋ฒˆ์งธ ๋ฌธ์ž์™€ 5๋ฒˆ์งธ ๋ฌธ์ž ์‚ฌ์ด์—์„œ ์ ‘์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋•Œ ์„œ๋กœ ๋งž๋‹ฟ์€ ๋ฌธ์ž ์Œ ์ค‘์—์„œ, ์„œ๋กœ ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ ๋งž๋‹ฟ์€ ์Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ด ์ ‘๊ธฐ์˜ ์ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์—์„œ์˜ ์ ‘๊ธฐ์˜ ์ ์ˆ˜๋Š” 1์ ์ด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 3๋ฒˆ์งธ ๋ฌธ์ž์™€ 4๋ฒˆ์งธ ๋ฌธ์ž ์‚ฌ์ด์—์„œ ์ข…์ด๋ฅผ ์ ‘์œผ๋ฉด ์ ์ˆ˜๋Š” 2์ ์ด ๋œ๋‹ค.

 

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด ๐‘†๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ ๐‘„๊ฐœ์— ๋‹ตํ•ด์•ผ ํ•œ๋‹ค.

  • โ€Š๐‘™ ๐‘Ÿ: ๋ฌธ์ž์—ด ๐‘†์˜ ๐‘™๋ฒˆ์งธ ๋ฌธ์ž, (๐‘™+1)๋ฒˆ์งธ ๋ฌธ์ž, โ‹ฏ, ๐‘Ÿ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ข…์ด์— ์“ฐ์—ฌ ์žˆ์„ ๋•Œ, ์ข…์ด๋ฅผ ํ•œ ๋ฒˆ ์ ‘์–ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์ ์ˆ˜๋Š” ๋ช‡ ์ ์ธ๊ฐ€?

ํ’€์ด

๋ฌธ์ž ์‚ฌ์ด์—์„œ๋งŒ ์ ‘์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์— ์ดˆ์ ์„ ๋‘์ž.

1 - 6์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ ‘์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š”

1๊ณผ 2 ์‚ฌ์ด๋ฅผ ์ ‘์–ด์„œ [1, 2]๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ

2์™€ 3 ์‚ฌ์ด๋ฅผ ์ ‘์–ด์„œ [1, 4]๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ

3๊ณผ 4 ์‚ฌ์ด๋ฅผ ์ ‘์–ด์„œ [1, 6]์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ

4์™€ 5 ์‚ฌ์ด๋ฅผ ์ ‘์–ด์„œ [3, 6]์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ

์ด๋ ‡๊ฒŒ ์‹œ์ž‘์ ๋ถ€ํ„ฐ 2 * n๊ฐœ์˜ ๋ฌธ์ž์—์„œ ์‹œ์ž‘ ๋ฌธ์ž์™€ ๋ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€์ง€, ๋์ ๋ถ€ํ„ฐ 2*n๊ฐœ์˜ ๋ฌธ์ž์—์„œ ์‹œ์ž‘๋ฌธ์ž์™€ ๋ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ํŒ๋ณ„ํ•ด ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ฉด ๋œ๋‹ค.

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s;
int N, Q;
int solve(int l, int r) {
    int ans1 = 0, ans2 = 0, ans=0, size_idx = 1;
    while((r-l)+1 >= size_idx * 2) {
        int l1 = l, r1 = size_idx*2 -1 + l;
        while(l1 < r1) {

            if(s[r1] == s[l1]) ans1 += 1;
            l1 += 1; r1 -= 1;
        }
        int l2 = r-(size_idx*2-1), r2 = r;
        while(l2 < r2) {
            
            if(s[r2] == s[l2]) ans2 += 1;
            l2 += 1; r2 -= 1;
        }
        ans = max(max(ans1, ans2), ans);
        ans1 = 0; ans2 = 0;
        size_idx += 1;
    }
    return ans;
}
int main(){
    cin>>N>>s>>Q;
    for(int i=0; i<Q; i++){
        int l, r; cin>>l>>r;
        cout<<solve(l-1, r-1)<<'\n';
    }


}

'algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 1593  (1) 2024.07.08
๋ฐฑ์ค€ 2482  (0) 2024.06.26
๋ฐฑ์ค€ 31845  (0) 2024.06.21
๋ฐฑ์ค€ 2151  (0) 2024.06.18
๋ฐฑ์ค€ 28325  (0) 2024.06.13