Implement a simple text editor. The editor initially contains an empty string, . Perform operations of the following types:
- append - Append string to the end of .
- delete - Delete the last characters of .
- print - Print the character of .
- undo - Undo the last (not previously undone) operation of type or , reverting to the state it was in prior to that operation.
Example
operation
index S ops[index] explanation
----- ------ ---------- -----------
0 abcde 1 fg append fg
1 abcdefg 3 6 print the 6th letter - f
2 abcdefg 2 5 delete the last 5 letters
3 ab 4 undo the last operation, index 2
4 abcdefg 3 7 print the 7th characgter - g
5 abcdefg 4 undo the last operation, index 0
6 abcde 3 4 print the 4th character - d
The results should be printed as:
f
g
d
Input Format
The first line contains an integer, , denoting the number of operations.
Each line of the subsequent lines (where ) defines an operation to be performed. Each operation starts with a single integer, (where ), denoting a type of operation as defined in the Problem Statement above. If the operation requires an argument, is followed by its space-separated argument. For example, if and , line will be 1 abcd.
Constraints
- The sum of the lengths of all in the input .
- The sum of over all delete operations .
- All input characters are lowercase English letters.
- It is guaranteed that the sequence of operations given as input is possible to perform.
Output Format
Each operation of type must print the character on a new line.
Sample Input
STDIN Function
----- --------
8 Q = 8
1 abc ops[0] = '1 abc'
3 3 ops[1] = '3 3'
2 3 ...
1 xy
3 2
4
4
3 1
Sample Output
c
y
a
Explanation
Initially, is empty. The following sequence of operations are described below:
- . We append to , so .
- Print the character on a new line. Currently, the character is c.
- Delete the last characters in (), so .
- Append to , so .
- Print the character on a new line. Currently, the character is y.
- Undo the last update to , making empty again (i.e., ).
- Undo the next to last update to (the deletion of the last characters), making .
- Print the character on a new line. Currently, the character is a.
문제 풀이
연산을 줄이고 줄이고 줄였지만 테스트 케이스 2~4개 가변적으로 타임아웃이 발생한다... 더 줄일 수가 있나..? 코틀린으로는 안되나..?
전략은 다음과 같다.
- string 연산은 stringbuilder를 사용한다.
- 문자열 제거는 substring을 사용한다.
- undo는 mutable list를 이용해 넣고 꺼내고 지운다.
함수 콜도 없애고, 할 건 다 한 것 같은데 타임아웃이 나니까 답이 없음.
import java.io.*
import java.util.*
fun main(args: Array<String>) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. */
val t = readLine()!!.trim().toInt()
var s = ""
var preS = mutableListOf<String>()
for (tItr in 1..t) {
val q = readLine()!!.trimEnd().split(" ")
if(q[0] == "1") {
preS.add(s)
val sb = StringBuilder()
s = sb.append(s).append(q[1]).toString()
} else if(q[0] == "2") {
preS.add(s)
s = s.substring(0, s.length - q[1].toInt())
} else if(q[0] == "3") {
println(s[q[1].toInt() - 1])
} else {
s = preS.get(preS.lastIndex)
preS.removeAt(preS.lastIndex)
}
}
}
댓글