アルゴ式の問題を解く Go リーディングゼロ
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 リーディングゼロ | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n string fmt.Scan(&n) t := n for i := 0; i < 10 - len(n); i++ { t = "0" + t } fmt.Println(t) } 最初からstringでnを読み込めば、strconvを呼び出す必要もないですね。 ということで今回はこれで👍
アルゴ式の問題を解く Go 3 桁区切り
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 3 桁区切り | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" "strconv" ) func main() { var n int fmt.Scan(&n) s := strconv.Itoa(n) // カンマを付与する var t []rune cnt := 0 for i := len(s) - 1; i >= 0; i-- { if cnt % 3 == 0 && cnt > 0 { t = append(t, ',') } t = append(t, rune(s[i])) cnt++ } // 逆にする var r []rune for i := len(t) - 1; i >= 0; i-- { r = append(r, t[i]) } fmt.Println(string(r)) } 逆にするループは削れそうです。 package main import ( "fmt" "strconv" ) func main() { var n int fmt.Scan(&n) s := strconv.Itoa(n) // カンマを付与する var t string for i := 1; i <= len(s); i++ { t = string(s[len(s) - i]) + t if i % 3 == 0 && i < len(s) { t = "," + t } } fmt.Println(string(t)) } これでいいですね。 ...
アルゴ式の問題を解く Go 塩基対の作成
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 塩基対の作成 | アルゴ式 実装 以下のように実装しました。 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)) } ということで今回はこれで👍
アルゴ式の問題を解く Go 書き換え回数
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 書き換え回数 | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n int var s, t string fmt.Scan(&n, &s, &t) c := 0 for i := 0; i < n; i++ { if s[i] != t[i] { c++ } } fmt.Println(c) }
アルゴ式の問題を解く Go 部屋番号
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 部屋番号 | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" "strconv" ) func main() { var n int fmt.Scan(&n) for i := 1; i <= n; i++ { a := strconv.Itoa(i) for _, v := range a { if v == '4' || v == '9' { goto again } } fmt.Println(i) again: } } goto文を使ったので割とすっきり実装できたんじゃないでしょうか。 ということで今回はこれで👍
アルゴ式の問題を解く Go カレンダー(2)
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 カレンダー(2) | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { for i := 1; i <= 3; i++ { fmt.Printf(". ") } for i := 1; i <= 31; i++ { fmt.Printf("%d ", i) if (i + 3) % 7 == 0 { fmt.Println() } } } ということで今回はこれで👍
アルゴ式の問題を解く Go 文字列検索
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 文字列検索 | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var s, t string fmt.Scan(&s, &t) for i := 0; i < len(s) - len(t); i++ { if s[i:i+len(t)] == t { fmt.Println("Yes") return } } fmt.Println("No") } ですが、これだと最後尾に一致する文字列があった場合に見逃してしまうので、ループの終了条件に+1します。 package main import ( "fmt" ) func main() { var s, t string fmt.Scan(&s, &t) for i := 0; i < len(s) - len(t) + 1; i++ { if s[i:i+len(t)] == t { fmt.Println("Yes") return } } fmt.Println("No") } Goは切り抜きが簡単にできるので、こういった実装は割とすっきり書けますね。 ということで今回はこれで👍
アルゴ式の問題を解く Go カレンダー(1)
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 カレンダー(1) | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { for i := 1; i <= 31; i++ { fmt.Printf("%d ", i) if i % 7 == 0 { fmt.Println() } } } ということで今回はこれで👍
アルゴ式の問題を解く Go 文字列の切り出し
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 文字列の切り出し | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n, l, r int var s string fmt.Scan(&n, &l, &r, &s) fmt.Println(s[l:r+1]) } Goにはデフォルトでスライスを切り抜く方法が用意されているので、かなりすっきりと実装できましたね。 ということで今回はこれで👍
アルゴ式の問題を解く Go 文字列探し(1)
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 文字列探し(1) | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var n int var s string fmt.Scan(&n, &s) c := 0 for i := 0; i < n - 2; i++ { if s[i:i+3] == "abc" { c++ } } fmt.Println(c) } ということで今回はこれで👍