본문 바로가기
Algorithm and PS/백준(Kotlin)

백준 - 1406 에디터 (코틀린)

by ESHC 2021. 5. 23.

[문제]

https://www.acmicpc.net/problem/1406

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

[코드]

import java.io.*
import java.util.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val str = StringTokenizer(br.readLine()).nextToken()
    val n = StringTokenizer(br.readLine()).nextToken().toInt()
    val linkedList : LinkedList<String> = LinkedList()
    // var cursor = str.length     cursor를 linkedList.listIterator() 로 대체
    for(s in str){
        linkedList.add(s.toString())
    }
    val iterator = linkedList.listIterator(str.length)
    for(i in 0 until n){
        val st = StringTokenizer(br.readLine())
        when (st.nextToken()) {
            "L" -> {
                if(iterator.hasPrevious())
                    iterator.previous()
                continue
            }
            "D" -> {
                if(iterator.hasNext())
                    iterator.next()
                continue
            }
            "B" -> {
                if(iterator.hasPrevious()){
                    iterator.previous()
                    iterator.remove()
                }
                continue
            }
            "P" -> {
                iterator.add(st.nextToken())
                continue
            }
        }
    }
    for(it in linkedList) {
        bw.write(it)
    }
    bw.flush()
    bw.close()
}

[풀이]

연결리스트를 이용해서 커서의 위치에 따라 삽입과 삭제를 하여 구할 수 있다.

이때 iterator를 이용하면 cursor 역할을 할 수 있다.

 

Github : https://github.com/eshc123/2021AlgorithmStudy/blob/main/src/main/PS/baekjoon/1406.kt

댓글