前半記事の続きから解いていく
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を活用していこうと思う。