본문 바로가기
Computer Science

Problem D : 키로거(Keylogger)

by OKOK 2020. 1. 8.

Problem D : 키로거(Keylogger)

 

제한시간: 1000 ms    메모리제한: 128 MB

 

 

심술쟁이 해커 덕표는 미스터 부의 패스워드를 해킹하려고 한다.

그래서 덕표는 미스터 부의 컴퓨터에 키로거를 설치했다.

며칠 후 덕표는 미스터 부의 로그파일을 입수했다.

그런데 로그파일을 본 덕표는 패스워드가 어떻게 되는지 바로 알 수는 없었다.

미스터부가 패스워드가 잘 생각나지 않았는지 방향키를 이용하여 좌우로 이동하면서 

문자를 삽입하거나 백스페이스를 이용하여 문자를 삭제한 흔적이 발견되었기 때문이다.

 

성질이 급한 덕표는 이를 해결하기 위해 종민이에게 부탁하였다

로그 파일을 받은 종민이는 패스워드를 찾을 수 있을까?




첫 행에 테스트 케이스 수 T ( 1<= T <=5)가 입력된다. 다음 T개의 행에 각각의 패스워드 로그가 입력된다. 각 로그에는 숫자와 영문자 그리고 ‘-’, ‘<’, ‘>’로 구성된 L(1<=L<=1,000,000)길이의 문자열이 주어진다. 키보드의 입력상태는 삽입모드라고 가정한다. ‘-’는 백스페이스를 이용하여 삭제가 가능하다면 커서의 바로 앞 1문자를 삭제한 로그이다. ‘<’는 왼쪽 방향키를 이용하여 이동이 가능하다면 커서 바로 왼쪽 1문자 앞으로 이동한 로그이다. ‘>’는 오른쪽 방향키를 이용하여 이동이 가능하다면 커서 바로 오른쪽 1문자 뒤로 이동한 로그이다.


각 테스트 케이스에 대하여 행으로 구분하여 미스터 부의 패스워드를 출력한다. 각 테스트 케이스에 대한 미스터 부의 패스워드의 길이는 1개 이상이다.

 

2

<<BP>Cd-

ThIsIsS3Cr3t

 

BAPC

ThIsIsS3Cr3t

 

#include <stdio.h>

#define MAX 10

char st[MAX];
struct data{
	char ch;
	data *prev, *next;
	data *myAlloc(char _ch, data *_prev, data *_next) {
		ch = _ch, prev = _prev, next = _next;
		return this;
	}
	void pop()
	{
		prev->next = next;
		next->prev = prev;
	}
} *head, *tail, *cur, buf[MAX];
int bn;

void push(char ch)
{
	data *pr = cur->prev;
	pr->next = cur->prev = buf[bn++].myAlloc(ch, pr, cur);
}

int main()
{
	freopen("input.txt", "r", stdin);
	int T;
	scanf("%d", &T);
	head = buf[0].myAlloc(0, 0, 0);
	tail = buf[1].myAlloc(0, 0, 0);
	while (T--){
		bn = 2;
		head->next = tail;
		tail->prev = head;
		cur = tail;
		scanf("%s", st);
		for (int i = 0; st[i]; i++){
			switch (st[i]){
			case '<':
				if (cur->prev != head) cur = cur->prev;
				break;
			case '>' :
				if (cur != tail) cur = cur->next;
				break;
			case '-':
				if (cur->prev != head) cur->prev->pop();
				break;
			default:
				push(st[i]);
			}
		}
		for (data *p = head->next; p != tail; p = p->next) printf("%c", p->ch);
		printf("\n");
	}

}

'Computer Science' 카테고리의 다른 글

Problem F : 합이 0이 되는 4개의 숫자들  (0) 2020.01.08
Problem E : 구간 성분  (0) 2020.01.08
Problem C : 용액  (0) 2020.01.08
Problem B : const구간의 합 구하기(2D)  (0) 2020.01.07
Problem A : 수열  (0) 2020.01.07

댓글