728x90
● [문제번호 1406] 에디터
https://www.acmicpc.net/problem/1406
● 알아야 할 것
: list 자료구조와 메소드
: iterator 메소드
● 풀이 과정
: vector를 사용하면 삽입, 삭제 메소드에서 시간초과 가능성을 고려하여 list로 구현함
: 문제에서 주어지는 조건과 명령을 그대로 코드에 반영
+ 2개의 stack을 이용하여 구현 가능함 ( stack <-> 커서 <-> stack )
● 주의 할 것
: iterator 삭제 메소드의 반환값을 iterator가 받아야 함
● 참고 할 것
: (2개의 stack으로도 구현 가능) https://intaehwang.tistory.com/32
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
// 문자열을 저장할 list
list<char> l;
// cursor 역할
list<char>::iterator cursor;
char cmd, input;
// list에 문자열 저장하기 전에 중간 단계 (필수 아님)
string str;
int M;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> str >> M;
// string -> list 로 옮기는 작업
for(int s = 0; s < str.length(); s++)
l.push_back(str[s]);
// list를 지역변수로 (선언 + 초기화) 동시 작업 가능
// list<char> l(s.begin(),s.end());
// 커서의 초기 위치는 문자의 맨 뒤
cursor = l.end();
// auto now = l.end(); 로 간결히 작성 가능
for(int m = 0; m < M; m++)
{
cin >> cmd;
// 커서 왼쪽 한 칸 옮김
if(cmd == 'L')
{
// 커서가 문장 맨 앞이면 무시
if(cursor == l.begin())
continue;
cursor--;
}
// 커서 오른쪽 한 칸 옮김
else if(cmd == 'D')
{
// 커서가 문장 맨 뒤이면 무시
if(cursor == l.end())
continue;
cursor++;
}
// 커서 왼쪽 문자 삭제
else if(cmd == 'B')
{
// 커서가 문장 맨 앞이면 무시
if(cursor == l.begin())
continue;
cursor--;
// 삭제하고 다음 노드를 가리키는 iterator 반환
cursor = l.erase(cursor);
}
// 커서 왼쪽 문자 추가
else if(cmd == 'P')
{
cin >> input;
l.insert(cursor, input);
}
}
// 완성된 문자열 출력
for(cursor = l.begin(); cursor != l.end(); cursor++)
cout << *cursor;
return 0;
}
● [백준] - [알고리즘 기초 1/2] - [200 - 자료구조 1] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 10828 | 스택 | https://pirateturtle.tistory.com/153 |
2 | 9093 | 단어 뒤집기 | https://pirateturtle.tistory.com/154 |
3 | 9012 | 괄호 | https://pirateturtle.tistory.com/155 |
4 | 1874 | 스택 수열 | https://pirateturtle.tistory.com/156 |
5 | 1406 | 에디터 | https://pirateturtle.tistory.com/158 |
6 | 10845 | 큐 | https://pirateturtle.tistory.com/161 |
7 | 1158 | 요세푸스 문제 | https://pirateturtle.tistory.com/162 |
8 | 10866 | 덱 | https://pirateturtle.tistory.com/164 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글
[BOJ/백준] 10866 덱 (0) | 2021.07.26 |
---|---|
[BOJ/백준] 1158 요세푸스 문제 (0) | 2021.07.26 |
[BOJ/백준] 10845 큐 (0) | 2021.07.26 |
[BOJ/백준] 1874 스택 수열 (0) | 2021.07.26 |
[BOJ/백준] 9012 괄호 (0) | 2021.07.26 |
[BOJ/백준] 9093 단어뒤집기 (0) | 2021.07.26 |
[BOJ/백준] 10828 스택 (0) | 2021.07.26 |
댓글