문제 설명
https://www.acmicpc.net/problem/5397
비밀번호 창에서 입력한 키가 주어졌을 때, 비밀번호 구하기
이때 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표만 입력
화살표는 <, >로 입력되며, 커서를 옮기는 역할
백스페이스는 -로 입력되며 커서의 바로 앞에 글자가 존재한다면 그 글자를 지우는 역할
문제 풀이법
백준 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 |