Study/Algorithm
BOJ (C/C++) 16139번: 인간-컴퓨터 상호작용
hwooo
2022. 10. 29. 19:28
https://www.acmicpc.net/problem/16139


16139번: 인간-컴퓨터 상호작용
첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째
www.acmicpc.net


풀이
i번째일 때 각 원소가 총 몇 개 들어왔는 지 저장하는 배열을 만들고, 이를 문자열의 길이만큼 벡터에 저장함.
l~r에 포함된 문자의 갯수이므로 l번째 문자도 포함해야 한다.
따라서 r-(l-1)을 해야 하는데, 이 때 l=0이면 오류가 나므로 처음에 모든 알파벳의 갯수를 0으로 초기화 해줌
코드
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector <int> s[26];
string S;
void Sum() {
int i, j, alpha[26] = { 0, };
for (j = 0; j < 26; j++) s[j].push_back(alpha[j]);
for (i = 0; i < S.length(); i++) {
alpha[S[i] - 'a']++;
for (j = 0; j < 26; j++) s[j].push_back(alpha[j]);
}
}
int main() {
int q, l, r;
char c;
cin >> S >> q;
Sum();
for (int i = 0; i < q; i++) {
scanf("%c", &c); // \n
scanf("%c %d %d", &c, &l, &r);
printf("%d\n", s[c - 'a'][r + 1] - s[c - 'a'][l]);
}
return 0;
}