인간-컴퓨터 상호작용 16139

PublicMinsu·2023년 3월 21일
0

문제

접근 방법

누적 합 문제이다. 알파벳 개수인 26개의 누적 합을 해주면 된다. 문자열을 돌며 같은 알파벳일 경우 이전의 합에 1을 증가시켜주고 아닐 시 그대로 가져오면 된다.

코드

#include <iostream>
#include <string>
using namespace std;
int prefix[200001][26], q, l, r;
string str;
char c;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> str;
    ++prefix[0][str[0] - 'a'];
    for (int i = 1; i < str.length(); ++i)
    {
        int k = str[i] - 'a';
        for (int j = 0; j < 26; ++j)
        {
            if (k != j)
                prefix[i][j] = prefix[i - 1][j];
            else
                prefix[i][j] = prefix[i - 1][j] + 1;
        }
    }
    cin >> q;
    while (q--)
    {
        cin >> c >> l >> r;
        int alpha = c - 'a', sum;
        if (l != 0)
            sum = prefix[r][alpha] - prefix[l - 1][alpha];
        else
            sum = prefix[r][alpha];
        cout << sum << "\n";
    }
    return 0;
}

풀이

누적 합에 대해 알고 있다면 쉽게 풀 수 있다. 문자의 첫 번째의 경우 이전의 값이 없기에 알파벳에 맞게 바로 증가 시켜주면 된다.

profile
연락 : publicminsu@naver.com

0개의 댓글