[백준/BOJ] 백준 5076번 : Web Pages
2021. 11. 20. 16:16ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/5076
괄호를 찾아서 여는 괄호일 때 스택에 넣고, 닫는 괄호일 때 스택의 top을 확인하는 방법으로 문제를 해결했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
while (1)
{
string input;
getline(cin, input);
if (input == "#")
break;
stack<string> st;
int index = 0;
bool check = true;
while (1)
{
if (index >= input.size())
break;
if (input.find("<", index) == string::npos)
break;
int left_index = input.find("<", index);
int right_index = input.find(">", left_index + 1);
string this_word = input.substr(left_index + 1, right_index - (left_index + 1));
//a 여는 기호일 경우
if (this_word.size() >= 2 && this_word[0] == 'a' && this_word[1] == ' ')
this_word = "a";
//<br />일 경우
else if (this_word[this_word.size() - 1] == '/')
{
index = right_index + 1;
continue;
}
//닫는 괄호일때
if (this_word[0] == '/')
{
this_word = this_word.substr(1);
//최근 연 괄호와 같을때
if (st.size() >= 1 && st.top() == this_word)
{
st.pop();
index = right_index + 1;
}
//최근 연 괄호랑 다를때
else
{
check = false;
break;
}
}
//여는 괄호일때
else
{
st.push(this_word);
index = right_index + 1;
}
}
if (st.size() != 0)
check = false;
if (check == true)
cout << "legal" << "\n";
else
cout << "illegal" << "\n";
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 1102번 : 발전소 (0) | 2021.11.20 |
---|---|
[백준/BOJ] 백준 1501번 : 영어 읽기 (0) | 2021.11.20 |
[백준/BOJ] 백준 1079번 : 마피아 (0) | 2021.11.20 |
[백준/BOJ] 백준 15972번 : 물탱크 (0) | 2021.11.20 |
[백준/BOJ] 백준 12784번 : 인하니카 공화국 (0) | 2021.11.20 |