알고리즘 공부 5

lsh235·2024년 10월 12일
0

CodingTest

목록 보기
12/31

Linked List

문제 : 백준 5397-키로거

생각한 구현 내용

  1. 입력받은 케이스 만큼 반복하여 비밀번호를 추측한다.
  2. 리스트를 이용하여 현재 커서위치에 따른 입력을 수행한다.

잊어버린 점

  1. cursor의 위치를 확인할때 int idx의 관리가 아닌 list의 iterator로 관리한다.
  2. 좌, 우로 갈때 더 이상 가지 못하는 것은 list의 begin과 end를 기준으로 확인한다.
  3. list의 중간에서 문자열을 지워야할 경우 현재 cursor에서 한칸을 뺀 후에 erase한다.

구현 코드

#include <bits/stdc++.h>
using namespace std;
int main(void) {
    // 입출력 분리해서 빠르게 동작하도록
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N = 0;
    cin >> N;

    vector<string> result;
    while (N > 0) {
        string input;
        cin >> input;

        list<char> L;
        auto cursor = L.end();
        for (const auto &chr : input) {
            if (chr == '<') {
                if (cursor != L.begin())
                    cursor--;
            } else if (chr == '>') {
                if (cursor != L.end())
                    cursor++;
            } else if (chr == '-') {
                if (cursor != L.begin()) {
                    cursor--;
                    cursor = L.erase(cursor);
                }
            } else {
                L.insert(cursor, chr);
            }
        }

        string str_L;
        for (const auto chr : L) {
            str_L += chr;
        }
        result.emplace_back(str_L);
        N--;
    }

    for (const auto str_result : result) {
        cout << str_result << endl;
    }

    return 0;
}

0개의 댓글