LoginSignup
0
0

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

Posted at

前半記事の続きから解いていく

ABC085B Kagami Mochi

ソートした後に前から要素を見て今まで見たどの要素より大きい値が取れたら、カウントする

ACコード

package main

import (
	"fmt"
	"sort"
)

func main() {
	var n int
	fmt.Scan(&n)
	d := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&d[i])
	}
	sort.Ints(d)
	ans := 0
	work := 0
	for _, num := range d {
		if num > work {
			work = num
			ans += 1
		}
	}
	fmt.Println(ans)
}

ABC085C Otoshidama

2種類のお札の数を定めるともう1種類のお札の数が定まるので、2種類のお札の数で全探索する

ACコード

package main

import (
	"fmt"
)

func main() {
	var n, y int
	fmt.Scan(&n, &y)
	for i := 0; i <= n; i++ {
		for j := 0; j <= n-i; j++ {
			if 10000*i+5000*j+1000*(n-i-j) == y {
				fmt.Println(i, j, n-i-j)
				return
			}
		}
	}
	fmt.Println(-1, -1, -1)
}

ABC049C 白昼夢

追加する文字列を末尾から見ると解ける。
strings.HasSuffixで指定された文字列が特定のサフィックスで終わっているかどうかを判定することができる。

ACコード

package main

import (
	"fmt"
	"strings"
)

func main() {
	var S string
	fmt.Scan(&S)

	words := []string{"dream", "dreamer", "erase", "eraser"}

	for len(S) > 0 {
		found := false
		for _, word := range words {
			if strings.HasSuffix(S, word) {
				S = S[:len(S)-len(word)]
				found = true
				break
			}
		}
		if !found {
			fmt.Println("NO")
			return
		}
	}
	fmt.Println("YES")
}

ABC086C Traveling

math.Absで絶対値を計算できる。float64でしかけいさんできないので、型変換が必要になる。

ACコード

package main

import (
	"fmt"
	"math"
)

func main() {
	var N int
	fmt.Scan(&N)

	var t, x, y int
	var prevT, prevX, prevY int

	for i := 0; i < N; i++ {
		fmt.Scan(&t, &x, &y)

		distance := math.Abs(float64(x-prevX)) + math.Abs(float64(y-prevY))
		time := t - prevT

		if int(distance) > time || (time-int(distance))%2 != 0 {
			fmt.Println("No")
			return
		}

		prevT, prevX, prevY = t, x, y
	}

	fmt.Println("Yes")
}

おわりに

AtCoderの問題を解くことで、新しいパッケージや関数を知ることができた。
今後も新しい言語を学ぶときにAtCoderを活用していこうと思う。

0
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
0
0