거북이의 IT 공부
[백준 1406] 에디터 - C++ / 알고리즘 '연결 리스트' 본문
문제
https://www.acmicpc.net/problem/1406
1406번: 에디터
문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가
www.acmicpc.net
나의 코드
#include <iostream> #include <list> using namespace std; int main() { list<char> str; list<char>::iterator cursor; string init; char com, add; int m; cin.tie(0); ios_base::sync_with_stdio(false); cin >> init; for (int i = 0; i < init.size(); i++) str.push_back(init[i]); cin >> m; cursor = str.end(); for (int i = 0; i < m; i++) { cin >> com; if (com == 'L') { if (cursor != str.begin()) cursor--; } else if (com == 'D') { if (cursor != str.end()) cursor++; } else if (com == 'B') { if (cursor != str.begin()) cursor = str.erase(--cursor); } else if (com == 'P') { cin >> add; str.insert(cursor, add); //insert : 왼쪽에 요소 삽입 } } for (list<char>::iterator itr = str.begin(); itr != str.end(); ++itr) cout << *itr; }
배운점
1. cin.tie(0); ios_base::sync_with_stdio(false);
endl보다 시간효율이 강해서 사용하는 편이지만
굳이 sync_with_stdio(false); 를 이용해서 C++ 입출력 객채를 가속시켜서 사용할 것이라면, scanf와 printf와 섞어서 사용하지 말 것이며, 싱글 쓰레드 환경에서만 사용(알고리즘 문제만 풀 때는 무조건 싱글스레드이므로 상관없지만 실무에선 쓰지말것)하고, 그래도 시간초과가 난다면 C 표준입출력 함수들을 사용하는 것을 추천하는 바입니다.
출처: https://eine.tistory.com/entry/CC-입출력-방법에-따른-속도-정리 [아인스트라세의 SW 블로그]
2. c++ 표준 입력 합수 cin
cin : 공백, 개행 무시!!!
따라서 space 단위로 끊어서 입력 받을 수 있다.
cin.get() : 공백, 개행 포함
문자만 입력 받음
cin.getline(변수의 주소, 최대 입력가능 문자수, 종결 문자)
: 공백, 개행 입력 받음
문자열만 입력받음
출처: https://luyin.tistory.com/334
[C++] 표준 입력 함수 cin, cin.get(), cin.getline()
1. cin => 에 존재 => 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져옴 => 공백, 개행 무시 => 개행 키보드 버퍼에 남겨둠 => space 단위로 끊어서 입력 받을 수 있다 cin은 문자와 문자열 모두 입..
luyin.tistory.com
3. list - insert()
: 반복자가 list.end()에 위치해도 push_back과 같은 효과를 발휘한다.
즉, 현재 반복자 위치의 왼쪽에 삽입한다.
(반대로 생각하면 반복자가 list.begin일 때 맨 첫 요소로 추가된다.)
'Baekjoon' 카테고리의 다른 글
RE. [백준 6198] 옥상 정원 꾸미기 - C++ / 알고리즘 monotone stack (0) | 2020.04.04 |
---|---|
[백준 2493] 탑 - C++ / 알고리즘 '스택' (0) | 2020.04.03 |
[백준 10828] 스택 - C, C++ (0) | 2020.03.28 |
[백준 1158] 요세푸스 문제 - C++ / 알고리즘 '연결 리스트' (0) | 2020.03.27 |
[백준 10808] 알파벳 개수 - c언어 (0) | 2020.03.26 |