[C++] 백준 5397: 키로커

Cyan·2024년 1월 27일
0

코딩 테스트

목록 보기
31/166

백준 5397: 키로커

문제 요약

키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다.

강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다.

문제 분류

  • 자료 구조
  • 스택
  • 연결 리스트

문제 풀이

이전 [C++] 백준 1406: 에디터 포스팅을 참고하여 풀었다.

전체적인 구조와 틀도 명령을 string으로 입력받는다는 것만 빼면 거의 비슷하다.

풀이 코드

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int main()
{
	list<char> l;
	list<char>::iterator it;
	string s;
	int t, size;

	cin >> t;
	while (t--)
	{
		cin >> s;
		l.clear();
		size = s.length();
		it = l.end();
		for (int i = 0; i < size; i++) {
			if (s[i] == '<'){
				if (it != l.begin()) it--;
			}
			else if (s[i] == '>') {
				if (it != l.end()) it++;
			}
			else if (s[i] == '-') {
				if (it != l.begin()) {
					it--;
					it = l.erase(it);
				}
			}
			else {
				it = l.insert(it, s[i]);
				it++;
			}
		}
		for (auto& x : l)
			printf("%c", x);
		printf("\n");
	}

	return 0;
}

0개의 댓글