アルゴ式の問題を解く Go できるだけ買う
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 できるだけ買う | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var a, b int fmt.Scan(&a, &b) fmt.Println(a / b) } ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 できるだけ買う | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var a, b int fmt.Scan(&a, &b) fmt.Println(a / b) } ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 ゼロサプレス | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { var s string fmt.Scan(&s) t := s for i := 0; i < len(s); i++ { t = s[i:] if s[i] != '0' { break } } if t == "0" { fmt.Println() } else { fmt.Println(t) } } 0の場合だけ例外として何も出力しないようにしています。 ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 リーディングゼロ | アルゴ式 実装 以下のように実装しました。 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を呼び出す必要もないですね。 ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 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)) } これでいいですね。 ...
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 塩基対の作成 | アルゴ式 実装 以下のように実装しました。 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)) } ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 書き換え回数 | アルゴ式 実装 以下のように実装しました。 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) }
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 部屋番号 | アルゴ式 実装 以下のように実装しました。 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文を使ったので割とすっきり実装できたんじゃないでしょうか。 ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 カレンダー(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() } } } ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 文字列検索 | アルゴ式 実装 以下のように実装しました。 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は切り抜きが簡単にできるので、こういった実装は割とすっきり書けますね。 ということで今回はこれで👍
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 カレンダー(1) | アルゴ式 実装 以下のように実装しました。 package main import ( "fmt" ) func main() { for i := 1; i <= 31; i++ { fmt.Printf("%d ", i) if i % 7 == 0 { fmt.Println() } } } ということで今回はこれで👍