본문 바로가기

BOJ

1406번 - 에디터

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만이 연결된 상황임을 다시 숙지하기