영어라 문제 대충 읽고 풀다가 몇 번 틀린 문제ㅋㅋ
이게 한번 괄호가 열리면 해당 기호가 고정된다.
예를 들어 << << >> >> 라고 하면 <<가 스택에 들어온 순간부터 [ 는 <<가 된다.
이거 깨닫고는 빨리 풀었다.
<<<<<<<<>>>><<>>>>>>
요런 경우 조심!
[ [ [ [ ] ] [ ] ] ]
이렇게 되어야 한다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;
int main() {
string s;
cin >> s;
if (s.size() % 2 == 1) {
printf("Keine Loesung\n");
return 0;
}
int cnt = 0;
queue<string> q;
for (int i = 0; i < s.size(); i += 2) {
if (s[i] == '<' && s[i + 1] == '<') {
cnt++;
q.push("<<");
}
else if (s[i] == '>' && s[i + 1] == '>') {
cnt++;
q.push(">>");
}
else {
printf("Keine Loesung\n");
return 0;
}
}
if (cnt % 2 == 1) {
printf("Keine Loesung\n");
return 0;
}
// < 하나만 들어오는 경우 미리 막음
stack<string> st;
string ans = "";
for (; !q.empty(); q.pop()) {
if (st.empty()) {
st.push(q.front());
ans += "[";
continue;
}
if (q.front() == st.top()) {
st.push(q.front());
ans += "[";
continue;
}
st.pop();
ans += "]";
}
if (!st.empty()) {
printf("Keine Loesung\n");
return 0;
}
cout << ans << "\n";
return 0;
}
'백준' 카테고리의 다른 글
1374 강의실 (0) | 2022.06.10 |
---|---|
18788 Swapity Swap (0) | 2022.05.22 |
1183 약속 (0) | 2022.05.14 |
10487 4 thought (0) | 2022.05.14 |
19952 인성 문제 있어?? (0) | 2022.05.14 |