AtCoder参加してみた

使用する言語

せっかくなら触ったことがない言語で学びながらやろうって気持ちでこの二つの言語を使用してます

なんで二つの言語かは、気分です

標準入力

  • AtCoderをやるまでは、標準入力なんてきにしたことなかったのであたふたしました

  • AtCoderにも載っている例やQiitaを参考にしました

  • Go

var n int
fmt.Scanf("%d", &n)

※fmt.Scan(&n)でもいけます

i = input()
  • 複数の入力値を受け取る場合

  • Go

var n1 n2 int
fmt.Scanf("%d %d", &n1, &n2)
a, b, c = map(int, input(.split()))

標準入力が理解できればあとは処理書くぞ

  • Aは単純な問題の場合が多くなっております。

    • 例えば、if else文で解ける問題も多いです。
    • 実際に問題を解いて提出をしたら、予めAtCoder側が用意したテストが自動で行われます。すべて通過すれば「AC」となり得点が獲得できます
  • Bの問題なのですがここから少しずつレベルが上がっていきます。

  • Cの問題からは数学的知識が必要になってくるので僕は、算数も危ういので中学数学から勉強しようと思ってます。

過去問

  • 実際に参加する前に過去問を解くことも可能です。個人的にはA,Bはマストで回答できるようになりたいので過去問をしつつ、開催時は参加するようにしてます

  • 実際にAC(正解)になったコードを晒したいと思います。

  • 第166回目のA, Bをpythonで解いたコードになります

    • 問題文は、下記URLを参照してください。

atcoder.jp

  • この問題は非常に簡単でした。
i = input()
if i == "ABC":
    print("ARC")
else:
    print("ABC")
  • B
n, k = map(int, input().split())
d = [0]*n  # 0 * n個分の要素数の配列を作成 ex. [0, 0, 0, 0, .....]
for _ in range(k):
    input()
    l = (list(map(int, input().split())))
    for i in l:
        d[i - 1] = 1  # 0を1に変更する

print(d.count(0))  # 0の要素の個数をカウント
  • せっかくなのでGoで解いたコードも晒します(別の問題になります)

    • 第160回目のA,B
  • A

package main

func main() {
    var a string
    fmt.Scanf("%s", &a)
    l := strings.Split(a, "")
    if l[2] == l[3] && l[4] == l[5] {
        fmt.Printf("Yes")
    } else {
        fmt.Printf("No")
    }
}
  • B
package main

func main() {
    var a int
    fmt.Scanf("%d", &a)
    b := a % 500
    r := a/500*1000 + b/5*5

    fmt.Println(r)
 
}

他者の解答

  • AtCoderのいい点としては、自分が正解不正解かかわらず、他者の正解したコードを閲覧できアルゴリズムのバリエーションを学ぶことができます
  • 解けなかった場合はとても参考になりますし、正解だった場合でも僕は、みるようにして次のコンテストや過去問を解くのに生かせるようにしてます

参加した感想

  • 各問題を解けたときは、嬉しく楽しいです
  • 普段の業務では、JS、PHPを使用していますが言語は違えどアルゴリズムという観点で考えると業務に活かせる場面が出てくるので引続き時間が許す限りAtCoderのコンテストには参加していこうと思っています

まとめ

  • 競プロ系のサービスは、考える力の向上や他者の考えもみれたりできるのでおもしろいです
  • せっかくなので今後も続けていきレーティングを少しずつ上げていけたらなとおもいます