LoginSignup
1
0

AtCoder Beginners SelectionをGoで解いてみた(前半)

Last updated at Posted at 2023-12-11

Goの基本的な文法に慣れるため、AtCoder Beginners Selectionを解いてみようと思う

AtCoder Beginners Selectionとは?

このコンテストは、「AtCoderに登録したけど何をしていいか分からない・・・!」という人に向けて作られた、初心者向け問題集です。

PracticeA Welcome to AtCoder

PracticeAGoのサンプルコードが問題文の下にある。
fmt.Scan 関数で標準入力からデータを読み込み、指定した変数に値を格納できる。

ACコード

package main

import (
	"fmt"
)

func main() {
	var a, b, c int
	var s string
	fmt.Scan(&a, &b, &c)
	fmt.Scan(&s)

	result := a + b + c
	fmt.Println(result, s)
}

ABC086A Product

https://atcoder.jp/contests/abs/tasks/abc086_a
abをかけて%2で偶奇判定すれば良い

ACコード

package main

import (
	"fmt"
)

func main() {
	var a, b int
	fmt.Scan(&a, &b)

	if a*b%2 == 0 {
		fmt.Println("Even")
	} else {
		fmt.Println("Odd")
	}
}

ABC081A Placing Marbles

strings.Count関数で文字列に含まれる特定の文字列をカウントできる

ACコード

package main

import (
	"fmt"
	"strings"
)

func main() {
	var s string
	fmt.Scan(&s)
	fmt.Println(strings.Count(s, "1"))
}

ABC081B Shift only

forループの条件部分に何も書かない場合、無限ループになることを利用して解いた

ACコード

package main

import "fmt"

func main() {
	var n int
	fmt.Scan(&n)
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&a[i])
	}
	ans := 0
	for {
		flg := true
		for i, _ := range a {
			if a[i]%2 == 0 {
				a[i] /= 2
			} else {
				flg = false
			}
		}
		if flg {
			ans += 1
		} else {
			break
		}
	}

	fmt.Println(ans)
}

ABC087B Coins

全探索すれば良い

ACコード

package main

import "fmt"

func main() {
	var a, b, c, x int
	fmt.Scan(&a, &b, &c, &x)
	ans := 0
	for ai := 0; ai <= a; ai++ {
		for bi := 0; bi <= b; bi++ {
			for ci := 0; ci <= c; ci++ {
				if x == ai*500+bi*100+ci*50 {
					ans += 1
				}
			}
		}
	}
	fmt.Println(ans)
}

ABC083B Some Sums

strconvパッケージを使用して、文字列と整数の変換ができる

ACコード

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var n, a, b int
	fmt.Scan(&n, &a, &b)
	ans := 0
	for i := 1; i <= n; i++ {
		str_i := strconv.Itoa(i)
		work := 0
		for _, ele := range str_i {
			digit, _ := strconv.Atoi(string(ele))
			work += digit
		}
		if a <= work && work <= b {
			ans += i
		}
	}
	fmt.Println(ans)
}

ABC088B Card Game for Two

Goでintのスライスをソートする方法は

// sはintのスライス
sort.Ints(s) // 昇順
sort.Sort(sort.Reverse(sort.IntSlice(s))) // 降順

ACコード

package main

import (
	"fmt"
	"sort"
)

func main() {
	var n int
	fmt.Scan(&n)
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&a[i])
	}
	sort.Sort(sort.Reverse(sort.IntSlice(a)))
	ans := 0
	for i, num := range a {
		if i%2 == 0 {
			ans += num
		} else {
			ans -= num
		}
	}
	fmt.Println(ans)
}

後半に続く

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0