-
백준 BOJ 4752 - HTML 에디터Problem Solving/BOJ 2020. 8. 23. 21:10
부분문자열의 끝(e)까지 열려있는 태그를 저장해둔다.
이때 다음의 경우에대해 예외처리를 해준다.
1.부분문자열 안에 여는태그 닫는태그 둘다있는경우
2.부분문자열 안에 여는태그만 있고 닫는태그가 없는경우
3.부분문자열 안에 여는태그가 없고 닫는태그가 있는경우부분문자열까지의 (b까지) 태그 관리 = v
부분문자열 안의 태그관리 = v2
1번의 경우
- v2가 0보다 큰경우이다. v2를 pop_back 해준다.
2번의 경우
- v2에 태그를 추가해준다.
3번의 경우
- v2가 0인 경우이다 이때의 경우를 cnt++ 해준다.
그 다음 부분문자열까지의 여는태그의 닫는태그 출력시 cnt를 이용해 이미 닫은태그는 출력하지 않는다.
그후 저장된 태그들을 순서에 맞게 출력해준다.
1. 부분문자열까지 여는태그 출력
2. 부분문자열 출력
3. 부분문자열에 여는태그가 있다면 닫는태그 출력
4. 부분문자열까지 여는태그의 닫는태그 출력
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include<iostream>#include<memory.h>#include<vector>#include<queue>#include<unordered_map>#include<algorithm>#include<string>#include<cmath>#define INF 1e9using namespace std;using lld = long long int;using pii = pair<int, int>;int n, m, k;int main() {ios_base::sync_with_stdio(false);cin.tie(NULL);int b, e;char s[210];while (1) {cin >> b >> e;if (b == -1 && e == -1) break;cin.getline(s,205);b++; e++;vector<string> v;vector<string> v2; // 부분문자열 안에있는 태그bool flag = false; // 태그안의 문자열인지bool flag2 = false; // 닫는태그인지string tmp;string substr;int cnt = 0;for (int i = 1; i < e; i++) {if (!flag &&s[i] == '<') {flag = true;if (s[i + 1] == '/') flag2 = true;}else if (flag2) {if (s[i] == '>') {if (i >= 1 && i < b) {if (v.size() > 0) v.pop_back();}else {if (v2.size() > 0) v2.pop_back();else if (v2.size() == 0) cnt++;}flag2 = false;flag = false;}else continue;}else if (flag){if (s[i] == '>') {flag = false;if (i >= 1 && i < b) {v.push_back(tmp);}else {v2.push_back(tmp);}tmp.clear();}else {tmp += s[i];}}}for (int i = b; i < e; i++) {substr += s[i];}for (int i = 0; i < v.size(); i++) {cout << "<" << v[i] << ">";}cout << substr;for (int i = v2.size() - 1; i >= 0; i--) {cout << "</" << v2[i] << ">";}for (int i = v.size() - 1-cnt; i >= 0; i--) {cout << "</" << v[i] << ">";}cout << "\n";}return 0;}cs 테스트 해보면 좋은 input들
0 15 Testing<b>!</b>
18 23 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
18 30 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
6 6 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
22 36 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
4 4 <b>123</b>
18 25 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
18 39 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
18 38 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
18 40 <bigger>1000, <biggest>10000</biggest>
0 16 :-/ :-> :-) :-<-> </->
8 23 <bigger>1000, </bigger><biggest>10000</biggest>
35 35 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
19 33 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
13 19 <a><b></b><c>ab<d>c</d></c></a>
=> <a><c>ab<d>c</d></c></a>'Problem Solving > BOJ' 카테고리의 다른 글
백준 BOJ 2904 수학은 너무 쉬워 (0) 2020.10.31 19237 BOJ 어른상어 (0) 2020.10.11 백준 BOJ 10407 - 2타워 (0) 2020.09.25 백준 BOJ 5052 - 전화번호 목록 (0) 2020.08.18 백준(BOJ) 2517 달리기 (0) 2020.07.17