package main import "fmt" func main() { var n int _, _ = fmt.Scan(&n) // n以下のコインを洗い出す coins := make([]int, 0) for i := 1; i < n; i++ { c := i * (i + 1) / 2 if c <= n { coins = append(coins, c) } else { break } } // fmt.Println(coins) // コインの種類を減らしながら最小パターンを探す min := n // 最小は全部1円コイン for len(coins) > 0 { cnt := 1 m := n - coins[len(coins)-1] for m > 0 { last := coins[0] for _, c := range coins { if c > m { break } last = c } m -= last cnt++ } if min > cnt { min = cnt } coins = coins[:len(coins)-1] } fmt.Println(min) }