Algorithm/baekjoon

04 연결리스트- 백준 5397

쿠뱃봉 2022. 1. 17. 16:50

1. 백준 5397 : 키로거

5397번: 키로거 (acmicpc.net)

(1)코드

#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(void) {
	int n;
	cin >> n;
	for (int j = 0; j < n; j++) {
		string input;
		cin >> input;
		list<char>pw;

		list<char>::iterator itr = pw.end();
		for (int i = 0; i < input.length(); i++) {
			if (input[i] == '<') {
				if (itr == pw.begin())continue;
				itr--;
			}
			else if (input[i] == '>') {
				if (itr == pw.end())continue;
				itr++;

			}
			else if (input[i] == '-') {
				if (itr == pw.begin())continue;
				itr = pw.erase(--itr);
			}
			else {
				pw.insert(itr, input[i]);
			}
		}

		for (auto it = pw.begin(); it != pw.end(); it++) {
			cout << *it;
		}
		cout << '\n';
		pw.clear();
	}

	return 0;
}

(2)알게된 개념

1.STL list 자료구조에서 insert() 과 erase() 기능

-insert() 기능

L={'A','B','C'} 이고 itr이 B를 가리킬 때 

insert(itr,'D') 를 실행하면

L={'A','D','B','C'}가 된다.

이후, itr는 'B'를 가리킨다.

 

-erase() 기능

L={'A','B','C'} 이고 itr이 B를 가리킬 때

erase(itr) 를 실행하면

L={'A','C'}가 되며

itr는 'C'를 가리킨다.

 

참고블로그)

https://hugssy.tistory.com/217

 

STL list insert, erase (C++)

C++ STL list의 삽입과 삭제에 대해서 간단히 정리하고자 한다. STL list .insert(iterator, 넣을 값) L = { A, B, C } 연결리스트는 A->B->C 와 같이 구성되어 있는 것이지만 표기의 편의성을 위해 위와 같이 표..

hugssy.tistory.com

2.STL list 자료구조에서 begin() 과 end() 

참고블로그)

https://leemoney93.tistory.com/66