기술 블로그

5397번 키로거 본문

알고리즘 문제/BOJ

5397번 키로거

parkit 2019. 10. 21. 13:43
728x90
반응형

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



vector의 insert와 erase는 O(N^2)의 연산이기 때문에 시간 초과가 걸린다.

따라서, O(1)인 list를 활용한다.


'-'일 때, temp를 활용하는 이유는 erase를 할 때에는 하나 감소시켜 진행한다.


begin()은 첫 원소를 가리키지만,

end()는 마지막 원소의 다음 칸에 있는 빈 칸을 가리킨다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
 
using namespace std;
 
int main(void)
{
    //freopen("C:\\Users\\park7\\Desktop\\sample_input.txt", "r", stdin);
    cin.tie(NULL);
 
    list<int> List;    
    List.push_back(1);
    auto itr = List.begin();
    auto itr2 = List.end();
 
    cout << (*itr) << '\n';
    //cout << (*itr2) << '\n'; // 오류 발생
    //List.erase(itr2); // 오류 발생
    //List.erase(--itr2); // 이렇게 작성해야 한다.
 
    return 0;
}
cs







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
32
33
34
35
36
37
38
39
40
41
#include <bits/stdc++.h>
 
using namespace std;
 
int main(void)
{
    //freopen("C:\\Users\\park7\\Desktop\\sample_input.txt", "r", stdin);
    cin.tie(NULL);
 
    int test_case;
    scanf("%d"&test_case);
    while (test_case--)
    {
        string s; list<char> lc; int idx = 0;
        auto itr = lc.begin();
        cin >> s;
        
        for (int i = 0; i < s.length(); i++)
            if (s[i] == '<')
            {
                if (itr == lc.begin()) continue;
                --itr;
            }
            else if (s[i] == '>')
            {
                if (itr == lc.end()) continue;
                ++itr;
            }
            else if (s[i] == '-')
            {
                auto temp = itr;
                if (itr != lc.begin()) { --temp; lc.erase(temp); }
            }
            else lc.insert(itr, s[i]);            
        
        for (auto i : lc) printf("%c", i);
        printf("\n");
    }
 
    return 0;
}
cs























728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

7453번 합이 0인 네 정수  (0) 2019.10.30
17779번 게리맨더링 2  (0) 2019.10.23
12865번 평범한 배낭  (0) 2019.10.21
17609번 회문  (0) 2019.10.13
3190번 뱀  (0) 2019.10.10