문제
- 문제 링크
BOJ 27397 - 문자열 변환과 쿼리 2
문자열 $S$가 주어진다.
$N$개의 쿼리에 대해 그에 맞는 처리를 해보자.
TL : $3$ sec, ML : $512$ MB
$1 ≤ len(S) ≤ 300,000$ $1 ≤ N ≤ 300,000$ $1 ≤$ $len(S)$ $*$ $count(n_2)$ $≤ 10^7$
알고리즘 분류
- 자료 구조(data structures)
- 문자열(string)
- 해시를 사용한 집합과 맵(hash _ set / map)
풀이
문자열 변환과 쿼리 $1$ 과 별반 다를 게 없다.
쿼리 내용 그대로 이번엔 최대 연속 구간을 세주면 되겠다.
이 역시 세번째 제한으로 인해 복잡도가 보장된다.
전체 코드
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 | #include<bits/stdc++.h> using namespace std; string s; char M[130]; int n; int main() { ios_base::sync_with_stdio(0); cin.tie(0); for (n = 65; n < 123; n++) M[n] = n; cin >> s >> n; for (char p, q, i; n--;) if (cin >> i; i & 1) { cin >> p >> q; for (i = 65; i < 123; i++) if (M[i] == p) M[i] = q; } else { int i(1), c(1), r(1); for (; i < (int)s.size(); i++) M[s[i]] == M[s[i - 1]] ? c++, r = max(r, c) : c = 1; cout << r << '\n'; } } | cs |
comment
끝
'Problem Solving > Baekjoon Online Judge (Gold)' 카테고리의 다른 글
백준 16934 - 게임 닉네임 (C++) (0) | 2023.04.29 |
---|---|
백준 27925 - 인덕션 (C++) (0) | 2023.04.29 |
백준 27396 - 문자열 변환과 쿼리 (C++) (0) | 2023.04.29 |
백준 20501 - Facebook (C++) (0) | 2023.04.28 |
백준 13701 - 중복 제거 (C++) (0) | 2023.04.28 |