https://www.acmicpc.net/problem/5397
5397번: 키로거
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입
www.acmicpc.net
// 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i = 0; i < N; i++){
list<char> l;
string s;
list<char>::iterator t = l.begin();
// t에 list 시작 주소를 저장
cin >> s; // 문자열 입력
for(auto c : s){
if(c == '<'){
if(t != l.begin()) t--;
// t가 시작 주소가 아니라면 주소 -1
}
else if(c == '>'){
if(t != l.end()) t++;
// t가 끝 주소가 아니라면 주소 +1
}
else if(c == '-'){
if(t != l.begin()){
t--;
t = l.erase(t);
} // t가 끝주소가 아니라면 - 앞에 있는 문자 삭제
}
else l.insert(t, c);
// t 주소에 문자 c 삽입
}
//출력
for(auto r : l) cout << r;
if(i != N-1) cout << "\n";
}
return 0;
}
// 리뷰
List를 활용해서 풀었는데 전체적으로 보면 문자만 List에 저장해놓고
주소 값을 '<' 와 '>' 이면 주소를 움직이고 '-'는 바로 앞의 주소를 삭제한다.
List iterator에 대해서 조금씩 익숙해지는 느낌이다.
'알고리즘' 카테고리의 다른 글
[백준/C++] 1436 영화감독 숌 (0) | 2022.06.23 |
---|---|
[백준/C++] 1874번 스택 수열 (0) | 2021.12.05 |
[백준/C++] 1259번 팰린드롬수 (0) | 2021.12.04 |
[백준/C++] 1158번 요세푸스 문제 List iterator 사용 (0) | 2021.12.02 |
[백준/C++] 3273번 두 수의 합 (0) | 2021.11.29 |