문제
- 문제 링크
BOJ 27396 - 문자열 변환과 쿼리
문자열 $S$가 주어진다.
$N$개의 쿼리에 대해 그에 맞는 처리를 해보자.
TL : $3$ sec, ML : $512$ MB
$1 ≤ len(S) ≤ 100,000$ $1 ≤ N ≤ 300,000$ $1 ≤$ 유형 $2$로 출력되는 문자의 총 수 $≤ 10^7$
알고리즘 분류
- 자료 구조(data structures)
- 문자열(string)
- 해시를 사용한 집합과 맵(hash _ set / map)
풀이
쿼리 1에서 $S$를 돌아보며 일일히 바꿔주고 있으면 당연히 $TLE$ 다.
등장하는 문자가 알파벳으로 한정됨에 따라 이에 맞는 카운트 배열을 만들어 주자.
$M[x] = y$ : 문자 $x$가, 현재 문자 $y$로 바뀐 상태.
쿼리 2는 $S$를 순회하며 $0, 1, ... n - 1$번 인덱스에 대해 $M[i]$를 출력해주면 된다.
이는 세번째 제한으로 인해 복잡도가 보장된다.
전체 코드
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 | #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 { for (char i : s) cout << M[i]; cout << '\n'; } } | cs |
comment
끝
'Problem Solving > Baekjoon Online Judge (Gold)' 카테고리의 다른 글
백준 27925 - 인덕션 (C++) (0) | 2023.04.29 |
---|---|
백준 27397 - 문자열 변환과 쿼리 2 (C++) (0) | 2023.04.29 |
백준 20501 - Facebook (C++) (0) | 2023.04.28 |
백준 13701 - 중복 제거 (C++) (0) | 2023.04.28 |
백준 12970 - AB (C++) (0) | 2023.04.28 |