과제2: HTML Tags Matching Stack 구현
과제를 못해서 점수가 0.5점이네 ;; ㅋㅋ 밤샜는데 결국 못했던 기억 ,,
그정도로 어려운거 백퍼 아니었을텐데 그냥 못했겠지 뭐 ,,
어쩄던간에 , ,~~~ 시작해보겠습니다.
실제 과제는 stl을 사용 못하게 했었음,, 근데 굳이 이럴필요가 없으니 난 걍 썼음 ㅋ
일단 맞는지는 모르겠지만 테스트케이스가 다 잘 돌아가니 됐다고 생각하고
이거 태그매칭 스택으로 구현하는거 되게 많은데 보통은 <이거 찾아서 넣고 >찾아서 팝하고 끝나는건데
우리 과제는 좀 더 복잡했다 저거 개수 아니고 태그 쌍으로 위치까지 봐야 되는 그런..??
스택 사용하는거 알았으니 되었다구 생각할 예정 . .~ 벡터stl은 언제써도 존나 구글링해서 이터레이터 씀 ㅋㅋ 맨날까먹
뭔가 이상하긴 한데 .. .
#include<iostream>
#include<string>
#include<stack>
using namespace std;
/*
이딴식으로 해도 되는지는 모르겠으나, ,
뭐 돌아가니까. ..
스택사용연습. .
*/
// /가 들어오면 top이랑 비교해서 같으면 pop
// <다음에 문자면 그거 tags 스택에 넣음
// < 다음에 /라면 /다음 문자 sk 스택에 넣음
// sk에 넣을 때마다 tags의 top과 비교 둘이 같으면 tags pop시킴
//tags가 empty라면 correct ,아니라면 짝꿍 안맞는거니까 incorrect
// 중간에 incorrect들은 예외잡기용
bool isHtmlMatched() {
char open;
char open_2;
stack<char> tags;
stack<char> sk;
string st;
cin >> st;
for (int i = 0; i < st.length(); i++) {
if (st.at(1) == '/') {
//애초에 여는태그면 false
// cout << "incorrect " << endl;
return false;
}
//open tag
if (st.at(i) == '<')
{
if (st.at(i + 1) != '/') {
open = st.at(i + 1);
tags.push(open);
}
else {
// 닫는태그(/) 라면
open_2 = st.at(i + 2);
sk.push(open_2);
if (tags.empty()) return false;//cout << "incorrect" << endl;
if (tags.top() == sk.top()) {
tags.pop();
//뭣도 없으면 incorrect
if (sk.empty()) {
return false;
//cout << "incorrect" << endl;
}
}
}
}
}
if (tags.empty()) {
return true;
//cout << "correct" << endl;
}
else {
return false;
//cout << "incorrect" << endl;
}
}
int main() {
bool flag = true;
int num;
cin >> num;
for (int i = 0; i < num; i++) {
flag = isHtmlMatched();
if (flag == true) {
cout << "correct" << endl;
}
else {
cout << "incorrect" << endl;
}
}
return 0;
}
'알고리즘까먹지말게' 카테고리의 다른 글
드디어 BFS/DFS 해보겠습니다. (0) | 2020.08.06 |
---|---|
자료구조 이것저것 정리 (0) | 2020.07.28 |
자구 4번째 과제(infix to postfix) (0) | 2020.07.28 |
Single LinkedList 기초 (0) | 2020.06.03 |
STL 간단 정리 (0) | 2020.06.02 |