Study/Algorithm

BOJ (C/C++) 16139번: 인간-컴퓨터 상호작용

hwooo 2022. 10. 29. 19:28

풀이

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;
}