あるエンジニアのAtCoder奮闘記

東京都港区にあるアミフィアブル株式会社のエンジニアが、AtCoderで解いた問題について振り返ったりしていく会社公認のブログです。

ABC 123-C Five Transportations Go言語環境構築編(Go)

irisruneです。最近のD問題難しくないですかね…

atcoder.jp

前回に引き続きGo言語ですが、今回は環境構築を行ったのでネタ作りのためその辺にも触れる予定です。

package main

import (
    "fmt"
    "math"
)

func minArray(arr []int, nCity int) int {
    var minCapa = 10000000000000000.0
    for i := 0; i < nCity; i++ {
        minCapa = math.Min(minCapa, float64(arr[i]))
    }
    return int(minCapa)
}

func main() {
    const nCity = 5
    var n, a, b, c, d, e int
    fmt.Scan(&n, &a, &b, &c, &d, &e)

    var minCapa = minArray([]int{a, b, c, d, e}, nCity)
    var maxTime int
    if n%minCapa == 0 {
        maxTime = n / minCapa
    } else {
        maxTime = (n / minCapa) + 1
    }

    fmt.Println(maxTime + nCity - 1)
}

正直に言うと、今回は公式の解説が丁寧なのでアルゴリズム面で書くことがないです。

一方で実装面はかなり苦戦しました。ポイントを挙げると、

  • 配列の構文が独特
  • forEachがない
  • Kotlinと違いmin関数の引数も戻り値もfloat64(double)型なのでキャストが必要
  • キャストがC言語ともKotlinとも違う構文

パッと思いついたのがこの辺です。C言語を使ってた頃に戻った気分ですね…

とりあえずコードレビューを。

  • Kotlinと違ってリストにmin関数を使って簡潔に記述できないので関数に退避したが、ループで済ませたのであまり意味がない。
  • 1016はわかりにくいのでconst INFとかで宣言しておいた方がよい。

Go言語を使った所感(続)

今回は環境構築を含む所感になります。環境構築の参照にしたサイトはこちら。

blog.okazuki.jp

  • (AtCoderとバージョンを揃えるため)当初バージョン1.6をインストールしたが、ツールのインストールが出来ずバージョン1.12.2を入れざるを得なかった。
  • 出来ないことが多いため記述が冗長になりがち。
  • for文やif文などやけに記号を省略させようとしてくる。
    • 型宣言もKotlinからコロンを省いたような感じ。
  • (無償の)IDEがない。

個人的にはIDEがないのは初心者向けではないと思うんですが、 初心者向けと言われがちなスクリプト言語のIDEってあまり思いつかないなあとか思ったりしました。 PythonはPyCharmとかJupyter Notebookとかありますが。

でも今はVSCodeが使えるだけでも有難いですね。あとは外部ツールが結構多いのでそれを使いこなせれば快適な環境になりそう…あれ?それはもう初心者とは程遠いのでは

雑記

  • Kotlin使ってるから猶更ですが、Go言語のIDEまで出してるJetbrains社はすごいなあと思います。
  • Kotlinがぬるま湯すぎたのかGo言語がどんどん難しく思えてきます。