코딩 조아/알고리즘시러
4949::균형 잡힌 세상
코도리조림
2021. 2. 12. 23:57
접근방식
스택
풀이방식
풀이 방식은 .을 입력받을 때까지 반복문을 돌면서 들어온 문자열에 대해 검사하면서, [(를 만나면 스택에 push해주고 )]를 만났을때에는 스택이 비어있지않고 스택의 top과 짝이 맞다면 pop해준다. 만약 스택이 empty인상태에서 pop해줘야할 경우는 무조건 균형이 맞지않은 케이스이기 때문에 flag로 구별해주고 그 문자열은 반복문을 벗어나 no를 곧바로 출력해준다. 다른 경우는 끝까지 검사하고 결과를 출력한다.
맞은코드
아직 의문인점) 내가 10번 이상 틀렸다는 코드랑 다른 부분은 스택이 비어있고 top과 짝이 맞지 않을때(조건이 맞지않는 경우) 탈출시켜주는 것과 아닐 경우 pop 해주는 부분의 순서만 바꼈을 뿐인 점.. 이해가 잘 안됨 이 부분이 달라진다해서 어떻게 맞고틀리고가 달라질 수 있는거지??흠ㅠ
#include<iostream>
#include<stack>
#include<vector>
#include<stack>
#include<string>
using namespace std;
int main() {
stack<char> tempList;
string temp;
while (1) {
getline(cin, temp);
if (temp == ".")break;
int flag = 0;
for (int i = 0; i < temp.size(); i++) {
if (temp[i] == '(' || temp[i] == '[')
tempList.push(temp[i]);
else if (temp[i] == ')') {
//바꾼 부분: empty&top이 짝이 맞을경우에 pop해줬던 걸(조건에 맞을 경우) 반대로
//조건에 맞지 않을 경우 flag표시해주고 탈출하는 것으로 바꿨음(조건에 맞지않을경우)
//달라진 부분은 없고 순서만 조금 바꿨을 뿐인데 맞다고 되어서 열심히 비교해봤지만 기존의 불통 코드랑 차이점을 못찾음ㅠㅠ
if (tempList.empty() || tempList.top() != '(')
{
flag = 1; break;
}
else tempList.pop();
}
else if (temp[i] == ']') {
if (tempList.empty() || tempList.top() != '[') { flag = 1; break; }
else tempList.pop();
}
}
if (tempList.size() != 0 || flag == 1)cout << "no\n";
else cout << "yes\n";
while (!tempList.empty())tempList.pop();
}
return 0;
}
더보기
이건 틀린 코드..담번에 더 생각해봐야지ㅠㅠ
#include<iostream>
#include<stack>
#include<vector>
#include<stack>
#include<string>
using namespace std;
int main() {
while (1) {
stack<char> tempList;
string temp;
getline(cin, temp);
if (temp == ".")break;
int flag = 0;
for (int i = 0; i < temp.size(); i++) {
if (temp[i] == '(' || temp[i] == '[')tempList.push(temp[i]);
else if (temp[i] == ')') {
if (tempList.size() > 0) {
if (tempList.top() == '(')tempList.pop();
}
else { flag = 1; break; }
}
else if (temp[i] == ']') {
if (tempList.size() > 0) {
if (tempList.top() == '[')tempList.pop();
}
else { flag = 1; break; }
}
}
if (tempList.size() != 0 || flag == 1)cout << "no\n";
else cout << "yes\n";
while (!tempList.empty())tempList.pop();
}
return 0;
}