티스토리 뷰
문제
20437번: 문자열 게임 2
첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다.
www.acmicpc.net
풀이
1. W가 소문자 알파벳으로만 이루어졌으므로 문자열 내에서 알파벳들의 위치를 담는 알파벳 벡터를 만들어 각각의 위치들을 담아줍니다.
2. 알파벳 벡터를 순회하며 크기가 K이상인 것들에 대해서 시작 인덱스를 st라 하면 끝은 st + k - 1까지 원소들을 K개씩 검사합니다.
3. 이 때 문제에서 요구하는 정확히 K개 문자를 포함하는 연속 문자열은 결국 w를 구성하는 연속 문자열[st, st + k -1]이며 그 길이는 제가 해당 문제에서 인덱스를 0부터 시작했기에 alp[?][st + k - 1] - alp[?][st] + 1 입니다.
4. 크기가 K이상인 모든 알파벳을 순회한 후 모아놓은 길이들중 개수가 1개 이상이면 그 값들의 최소, 최대가 정답이 되고 아니라면 -1을 출력하여 해결할 수 있습니다.
코드
#include <bits/stdc++.h>
using namespace std;
int t, k, n;
string w;
vector<int> alp[26], cand;
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> t;
while (t--) {
cin >> w >> k;
n = w.size();
cand.clear();
for (int i = 0; i < 26; i++) alp[i].clear();
for (int i = 0; i < n; i++) alp[w[i] - 'a'].push_back(i);
for (int i = 0; i < 26; i++) {
if (alp[i].size() < k) continue;
for (int st = 0; st + k - 1 < alp[i].size(); st++)
cand.push_back(alp[i][st + k - 1] - alp[i][st] + 1);
}
if (cand.size() == 0) cout << -1 << '\n';
else cout << *min_element(cand.begin(), cand.end()) << " " << *max_element(cand.begin(), cand.end()) << '\n';
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준 5867] Scrambled Letters (0) | 2021.02.07 |
---|---|
[백준 20438] 출석체크 (0) | 2021.01.08 |
[백준 20435] ZOAC3 (0) | 2021.01.08 |
[백준 3109] 빵집 (0) | 2021.01.08 |
[백준 16973] 직사각형 탈출 (0) | 2021.01.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카카오 표 편집
- 이분탐색
- 프로그래머스
- 카카오 인턴십
- 2022 카카오블라인드
- 2021 카카오 블라인드
- 게임이론
- 카카오 2차코딩테스트
- 구현
- 2021 KAKAO BLIND
- 위클리 챌린지
- DP
- 누적합
- 파싱
- 투포인터
- 백준
- 2022 카카오 블라인드 코딩테스트
- 카카오 2021
- 카카오 2020 인턴십
- 2022 KAKAO BLIND RECRUITMENT
- 트리
- 표 편집
- 시뮬레이션
- 2020 KAKAO BLIND RECRUITMENT
- 동적계획법
- Kakaoblind
- 프로그래머스 월간코드챌린지
- 유니온파인드
- 프로그래머스 위클리 9주차
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함