문제를 보고 먼말이지? 싶으면은 90도 회전해서 보거나
단어를 하나 더 붙여보거나 뒤짚어도 항상봐야한다
"도식화"하면서
이 문제는 90도 돌려서 보면은 stack을 사용하는 문제이다.
이걸 어케 생각함??
밑에 코드는 그냥 안봐도됨 얼마나 더럽게 짜고 문제를 이해를 못한 부분을 보여주는 코드임. (내코드)
스택이라는 개념이 그냥 떠오르지가 않아서 저렇게 다 짜놓고 인덱스 범위 생각또 못해서 틀림.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
#define endl "\n"
int n, cnt = 0;
string m;
bool b = true;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> m;
if (m.size() & 1) continue;
if (m.size() == 2)
{
if (m[0] == m[1])
{
++cnt;
continue;
}
}
if (m.size() >= 4)
{
if (m[0] == m[1] && m[2] == m[3])
{
if (m.size() == 4)
{
++cnt;
continue;
}
else
{
for (int j = 4; j < m.size(); j += 2)
{
if (m[j] != m[j + 1])
{
b = false;
}
}
if (b) ++cnt;
}
}
if (m[0] == m[3] && m[1] == m[2])
{
if (m.size() == 4)
{
++cnt;
continue;
}
else
{
for (int j = 4; j < m.size(); j += 2)
{
if (m[j] != m[j + 1])
{
b = false;
}
}
if (b) ++cnt;
}
}
}
b = true;
}
cout << cnt << endl;
return 0;
}
좋은 단어라면은 어쨋든 이런식으로 들어올 것임.
좋은 단어가 아니라면은
스택에 이런식으로 채워질꺼임.
그래서 이 문제는 스택을 사용을 하는 것임.
문제를 봣을 때 이해가 안간다 => 뒤짚어 보고 붙여보고 돌린다.
그리고 어떻게 풀지를 아이디어를 잡는다.
#include <iostream>
#include <stack>
using namespace std;
#define endl "\n"
int n, cnt = 0;
string m;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> m;
stack<char> st;
for (char c : m)
{
if (st.size() && st.top() == c) st.pop();
else st.push(c);
}
if (st.size() == 0) ++cnt;
}
cout << cnt << endl;
return 0;
}
문제에서 "짝짓기", "폭발" 이라는 단어가 들어가면
"stack"을 사용해야되지 않을까? 라고 생각을 하도록 하자.