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

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

今回の問題は以下です。

塩基対の作成 | アルゴ式

実装

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

package main
import (
    "fmt"
)

func main() {
    var n int
    var s string
    fmt.Scan(&n, &s)
    replace := func (s string, i int, t rune) string {
        runes := []rune(s)
        runes[i] = t
        return string(runes)
    }
    for i := 0; i < n; i++ {
        switch s[i] {
            case 'A': s = replace(s, i, 'T')
            case 'T': s = replace(s, i, 'A')
            case 'G': s = replace(s, i, 'C')
            case 'C': s = replace(s, i, 'G')
        }
    }
    fmt.Println(s)
}

replace関数の効率は普通に悪い気もしますが、まぁこの問題であれば解けたのでいいでしょう。

最初から[]runeに変換しておけばもっと効率がいいですね。

package main
import (
    "fmt"
)

func main() {
    var n int
    var s string
    fmt.Scan(&n, &s)
    runes := []rune(s)
    for i := 0; i < n; i++ {
        switch s[i] {
            case 'A': runes[i] = 'T'
            case 'T': runes[i] = 'A'
            case 'G': runes[i] = 'C'
            case 'C': runes[i] = 'G'
        }
    }
    fmt.Println(string(runes))
}

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