Notice
Recent Posts
Recent Comments
Link
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

풀이 보관함

[C++] 백준 5397번: 키로거 본문

problem solving/백준

[C++] 백준 5397번: 키로거

viin 2022. 7. 8. 18:45

문제

https://www.acmicpc.net/problem/5397

 

풀이

커서를 기준으로 컨테이너를 두개로 나눠서 >, <, - 에 따라서 옮겨주면 풀 수 있다.

벡터는 원소의 추가/삽입마다 복사해야하므로 속도가 느리니까 원소 변경이 잦다면다른 컨테이너를 써야 한다. 

힌트를 보면 스택이라고 나와있는데 노드로 푸는게 직관적으로 더 좋은 것 같다. 

그리고 다들 보면 list로 풀기도 한다.

 

소스

#include <iostream>
#include <list>
#include <string>
#include <stack>
#include <vector>
#include<algorithm>
 
int main()
{
    int T = 0std::cin >> T;
    while(T--)
    {
    std::string code; std::cin >> code;
    std::stack<char> c1, c2;
    
    char temp; char c;
    for(int i=0; i<code.length(); ++i)
    {
        c = code[i];
        if(c == '<')
        {
            if(c1.empty()) continue;
            c2.push(c1.top());
            c1.pop();
        }
        else if(c == '>')
        {
            if(c2.empty()) continue;
            c1.push(c2.top());
            c2.pop();
            
        }
        else if(c == '-')
        {
            if(c1.empty()) continue;
            c1.pop();
        }
        else
            c1.push(c);
    }
 
    std::string result;
    while (!c2.empty())
    {
        c1.push(c2.top());
        c2.pop();
    }
    while(!c1.empty())
    {
        result += c1.top();
        c1.pop();
    }
    
    std::reverse(result.begin(), result.end());
 
    std::cout << result <<'\n';
    if(T==0break;
    
    }
    return 0;
}
cs
반응형
Comments