반응형
정답코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
while(1)
{
string input;
getline(cin, input);
if (input == ".")
{
break; //마지막 조건이 .이므로 .이 들어가면 break;
}
stack<char> s1;
bool flag = 0;
for (int i = 0; i < input.length(); i++)
{
char c = input[i];
if((c == '(') || (c == '['))
{
s1.push(c);
}
else if(c == ')')
{
if(!s1.empty() && s1.top() == '(')
{
s1.pop();
}
else
{
flag = 1;
break;
}
}
else if(c == ']')
{
if(!s1.empty() && s1.top() == '[')
{
s1.pop();
}
else
{
flag = 1;
break;
}
}
}
if (flag == 0 && s1.empty())
{
cout << "yes" << endl;
}
else
cout << "no" << endl;
}
return 0;
}
일단 .이 들어가면 탈출해야 하므로 IF문을 통해 BREAK;가 되도록 만들어줍니다.
이후 while문을 통해 getline으로 읽은 문장의 char 하나하나를 분석하면 됩니다. 먼저 ( 나 [가 나올 때는 push를 해주는 것으로 하고 그 다음 조건에서는 top이 ( 이거나 [ 일 때 만약 empty가 비어있지 않다면 pop을 하도록 해주면 됩니다.
만약 이 조건과 다를 경우 flag를 1로 바꾸고 (false)그 다음 break;를 통해 빠져나가도록 만들어줍니다. bool flag를 통해 yes와 no를 구분해주는 것입니다.
그리고 마지막에 정상적으로 처리가 되었다면 flag 는 0일테고 s1.empty() 즉 s1또한 비어있을 것이기 때문에 이 경우 yes를 하고 아닌 경우는 정상적인 세상이 아니라고 판단을 해서 no를 해주시면 됩니다.
반응형
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[C++] 백준 10799번 쇠막대기 (0) | 2024.11.05 |
---|---|
[c++] 1874번 스택 수열 (0) | 2024.11.05 |
[C++] 백준 10773 제로 (0) | 2024.11.03 |
[C++] 백준 10828 스택 (0) | 2024.11.03 |
[C++] 백준 5086번 배수와 약수 (0) | 2024.11.03 |