#include <iostream>
#include <algorithm>
#include <cstring>
#include <list>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
list<char> passwd;
string input;
cin >> input;
list<char>::iterator itr = passwd.end();
for (char c : input) {
if (c == '<') {
if (itr != passwd.begin()) {
itr--;
}
}
else if (c == '>') {
if (itr != passwd.end()) {
itr++;
}
}
else if (c == '-') {
if (itr != passwd.begin()) {
list<char>::iterator backItr = itr;
backItr--;
passwd.erase(backItr);
}
}
else {
passwd.insert(itr, c);
}
}
for (char c : passwd) {
cout << c;
}
cout << endl;
}
return 0;
}
처음 제출한 코드에서 ZNEC런타임 오류가 발생했다. 백준help의 피드백대로 return 0을 넣어 main함수의 반환값을 지정해주어도 문제는 해결되지 않았다.
가까스로 찾은 원인은 -가 입력되어 itr 앞의 문자열을 삭제할 때, itr의 앞에 아무것도 없다면(passwd리스트의 begin()이라면) 정상적으로 실행이 되지 않는다는 것이다.
ZNEC 오류는 프로그램이 예외적으로 종료되거나 비정상적인 동작을 하는 경우에 나타난다. 단순히 return을 지정해주지 않을 때만 발생하는 오류는 아니었다.