article thumbnail image
Published 2023. 1. 10. 20:21

문제 설명

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

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입

www.acmicpc.net

비밀번호 창에서 입력한 키가 주어졌을 때, 비밀번호 구하기

이때 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표만 입력

화살표는 <, >로 입력되며, 커서를 옮기는 역할

백스페이스는 -로 입력되며 커서의 바로 앞에 글자가 존재한다면 그 글자를 지우는 역할

 

문제 풀이법

백준 1406 에디터와 굉장히 유사한 문제이다

다양한 위치에서의 삽입/삭제를 위해 list를 사용한다

커서의 위치는 우선 맨 앞으로 설정한 후, for문을 돌면서 해당 글자에 맞게 수행한다

 

  • <
    • 커서가 맨 앞인 경우를 제외하고, 커서를 앞쪽으로 옮기기 위해 cur-- 수행
  • >
    • 커서가 맨 뒤인 경우를 제외하고, 커서를 뒤쪽으로 옮기기 위해 cur++ 수행
  • -
    • 앞에 문자가 있는지 확인 후, 삭제
  • 그 외의 문자
    • 커서의 왼쪽에 문자를 insert

 

 

소스 코드

#include <iostream>
#include <list>

using namespace std;

int main()
{
    int n;
    
    cin >> n;
    
    for (int i = 0; i < n; i++)
    {
        string str;
        cin >> str;
        
        list<char> l;
        
        auto cur = l.begin();
        
        for (auto j : str)
        {
            if (j == '<')
            {
               if (cur != l.begin())
                    cur--;
            }
            else if (j == '>')
            {
                if (cur != l.end())
                    cur++;
            }
            else if (j == '-')
            {
                if (cur != l.begin())
                    cur = l.erase(--cur);
            }
            else
                l.insert(cur, j);
        }
        
        for (auto j : l)
            printf("%c",j);
        
        printf("\n");
        
    }
        
    
    return 0;
}

'Algorithm Study' 카테고리의 다른 글

[프로그래머스] 1단계 - 폰켓몬  (0) 2023.01.10
[백준] 1158 요세푸스 문제  (0) 2023.01.10
[백준] 1406 에디터  (0) 2023.01.10
[백준] 1919 애너그램 만들기  (0) 2023.01.09
[백준] 11328 Strfry  (0) 2023.01.09
복사했습니다!