반응형
https://www.acmicpc.net/problem/16139
16139번: 인간-컴퓨터 상호작용
첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째
www.acmicpc.net
- 문제
문자열이 주어지면 l번째 문자부터 r번째 문자 사이에 나타나는 문자 a의 횟수를 출력하는 문제다.
- 해설
서브태스크 1에 문자열의 길이는 2,000자 이하라고 되어있지만,
이렇게 문제를 풀면 50점밖에 못받는다.!!!!
100점을 맞으려면 입력에 주어지는 1 <= q <= 200,000를 보고 풀어야
100점을 받을 수 있다.
counts에 각 알파벳별로 몇번 나왔는지 저장하게 했다.
- 풀이
#include <iostream>
#include <string>
using namespace std;
// 50점 맞은 이유는 서브태스크 1의 문자열 길이 2000자를 보고 문제를 풀어서 그럼, 위에 문제에서는 q가 200,000까지 가능하다고 해서 혹시나 해서 범위를 2001에서 200001로 키웠더니 100점 맞음
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string S;
int q, start, end;
int counts[27][200001];
char letter;
cin >> S >> q;
counts[S[0] - 'a'][0] = 1;
for (int i = 1; i < S.size(); i++)
{
for (int j = 0; j < 27; j++)
{
counts[j][i] = counts[j][i - 1];
}
counts[S[i] - 'a'][i]++;
}
for (int i = 0; i < q; i++)
{
cin >> letter >> start >> end;
int temp = letter - 'a';
if (start == 0)
cout << counts[letter - 'a'][end] << '\n';
else
cout << counts[letter - 'a'][end] - counts[letter - 'a'][start - 1] << '\n';
// if (start == 0)
// cout << counts[temp][end] << '\n';
// else
// cout << counts[temp][end] - counts[temp][start - 1] << '\n';
}
return 0;
}
- 새롭게 알게 된 점
반응형
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준][C++] 25682: 체스판 다시 칠하기 2 (0) | 2022.11.12 |
---|---|
[백준][C++] 11660: 구간 합 구하기 5 (0) | 2022.11.12 |
[백준][C++] 2559: 수열 (0) | 2022.11.10 |
[백준][C++] 11659: 구간 합 구하기 4 (0) | 2022.11.10 |
[백준][C++] 2580: 스도쿠 (2) | 2022.11.08 |