0. 링크
https://www.acmicpc.net/problem/1406
1406번: 에디터
문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가
www.acmicpc.net
1. 조건 정리
1) 먼저 문자열을 입력 받는다. (영어 소문자만) (십만을 넘지 않는다.)
2) 커서는 글자 사이사이에 존재하며 문자열의 양 끝에도 존재할 수 있다.
3) 입력 받을 명령어의 개수를 입력받는다. (오십만 이하이다.
4) 명령어는 4가지 존재한다.
5) 맨 처음 커서는 문자열의 맨 뒤에 존재한다.
6) 해당 명령들을 모두 수행한 이후의 문자열을 출력한다.
2. 생각
1) 해당 문자열을 리스트로 구현한다.
1> 삭제와 삽입을 주로 진행하니까
2> 커서를 옮겨가는 작업은 node에 대한 포인터로 구현한다.
2) 커서는 어떻게 구현할 것인가?
1> 문자의 오른쪽에 있는 커서 공간 = 해당 문자 노드
2> 커서 왼쪽에 문자를 추가 => 해당 문자 노드 오른쪽에 문자를 추가
3> 커서 왼쪽 문자를 삭제 => 해당 문자를 삭제
3) head와 tail에서는 실행되지 못하게 하기
3. 코드 구현
1) 입력
1> str: 문자열 입력 받기 (실제 size는 N) -> 추후에 리스트에 넣는다.
2> M: 입력 받을 명령어의 개수 (1<=M<=500000)
2) 추가적으로 설정해야 할 것
1> idx: 커서의 위치 index
2> LIST mylist: 만들어둔 리스트
3> N: 문자열의 size
3) 명령어 입력 받기
4. 교훈
1) 여러번 시행하는 경우 while(n--)를 사용해도 좋다.
2) 문자열 사용방법 익히기
3) node가 담는 값이 char이다. (int가 아니다.)
4) search(0)를 하면 head에 위치한 상황이다.
5) 초기 상황이 head와 tail만이 연결된 상황임을 다시 숙지하기