こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

ランレングス圧縮 | アルゴ式

実装

以下のように実装しました。

package main
import (
    "fmt"
    "strconv"
)

func main() {
    var s string
    fmt.Scan(&s)
    c := s[0]
    ind := 1
    r := ""
    for i := 1; i < len(s); i++ {
        if c != s[i] {
            r += string(c) + strconv.Itoa(ind)
            c = s[i]
            ind = 1
        } else {
            ind++
        }
    }
    r += string(c) + strconv.Itoa(ind)
    fmt.Println(r)
}

continueを使うとコードの重複もなくなりきれいになります。

package main
import (
    "fmt"
    "strconv"
)

func main() {
    var s string
    fmt.Scan(&s)
    ind := 1
    r := ""
    for i := 1; i <= len(s); i++ {
        if i < len(s) && s[i-1] == s[i] {
            ind++
            continue
        }
        
        r += string(s[i-1]) + strconv.Itoa(ind)
        ind = 1
    }
    fmt.Println(r)
}

ということで今回はこれで👍