피너클의 it공부방
백준 20437 문자열 게임 2 (c++) : 피너클 본문
728x90
반응형
https://www.acmicpc.net/problem/20437
그냥 풀었다.
int test;
cin >> test;
while (test-- > 0) {
cin >> str;
cin >> k;
vector<int> arr[27];
arr은 각 알파벳의 위치가 들어간다.
arr[0]에는 a의 위치들이 들어간다.
int len = str.length();
for (int i = 0; i < len; i++) {
int index = str[i] - 'a';
arr[index].push_back(i);
}
위치들을 넣어준다.
int ans_min = 987654321, ans_max = -1;
for (int eng = 0; eng < 27; eng++) {
for (int i = 0; i + k - 1 < arr[eng].size(); i++) {
ans_min = min(ans_min, arr[eng][i + k - 1] - arr[eng][i] + 1);
ans_max = max(ans_max, arr[eng][i + k - 1] - arr[eng][i] + 1);
}
}
그리고 위치들에서 k만큼 떨어진놈들의 길이를 구해주면 된다.
if (ans_min == 987654321) cout << -1 << '\n';
else cout << ans_min << ' ' << ans_max << '\n';
}
return 0;
}
출력하면 끝이다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int k;
string str;
int main(int argc, char** argv)
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int test;
cin >> test;
while (test-- > 0) {
cin >> str;
cin >> k;
vector<int> arr[27];
int len = str.length();
for (int i = 0; i < len; i++) {
int index = str[i] - 'a';
arr[index].push_back(i);
}
int ans_min = 987654321, ans_max = -1;
for (int eng = 0; eng < 27; eng++) {
for (int i = 0; i + k - 1 < arr[eng].size(); i++) {
ans_min = min(ans_min, arr[eng][i + k - 1] - arr[eng][i] + 1);
ans_max = max(ans_max, arr[eng][i + k - 1] - arr[eng][i] + 1);
}
}
if (ans_min == 987654321) cout << -1 << '\n';
else cout << ans_min << ' ' << ans_max << '\n';
}
return 0;
}
전체코드다.
728x90
반응형
'백준' 카테고리의 다른 글
백준 8979 올림픽 (c++) : 피너클 (0) | 2025.09.16 |
---|---|
백준 10217 KCM Travel (c++) : 피너클 (0) | 2025.09.14 |
백준 15927 회문은 회문아니야 (c++) : 피너클 (0) | 2025.09.13 |
백준 3392 화성 지도 (c++) : 피너클 (0) | 2025.09.02 |
백준 13511 트리와 쿼리 2 (c++) : 피너클 (1) | 2025.09.01 |
Comments