From 15d736376916c6d58a6b4d47b0e9fa819d756350 Mon Sep 17 00:00:00 2001 From: VicRen Date: Sat, 31 Oct 2020 23:01:57 +0800 Subject: [PATCH] 31: coin sums --- 31_coin_sums/main.go | 20 +++++++++++++++++++ 31_coin_sums/main_test.go | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 31_coin_sums/main.go create mode 100644 31_coin_sums/main_test.go diff --git a/31_coin_sums/main.go b/31_coin_sums/main.go new file mode 100644 index 0000000..d9491ce --- /dev/null +++ b/31_coin_sums/main.go @@ -0,0 +1,20 @@ +package main + +import "fmt" + +var coins = []int{1, 2, 5, 10, 20, 50, 100, 200} + +func main() { + fmt.Println(sumCoins(200)) +} + +func sumCoins(target int) int { + t := make([]int, target+1) + t[0] = 1 + for _, c := range coins { + for j := c; j <= target; j++ { + t[j] += t[j-c] + } + } + return t[target] +} diff --git a/31_coin_sums/main_test.go b/31_coin_sums/main_test.go new file mode 100644 index 0000000..1fd4b29 --- /dev/null +++ b/31_coin_sums/main_test.go @@ -0,0 +1,42 @@ +package main + +import "testing" + +func Test_sumCoins(t *testing.T) { + type args struct { + target int + } + tt := []struct { + name string + args args + want int + }{ + { + "1", + args{1}, + 1, + }, + { + "2", + args{2}, + 2, + }, + { + "3", + args{3}, + 2, + }, + { + "4", + args{4}, + 3, + }, + } + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + if got := sumCoins(tc.args.target); got != tc.want { + t.Errorf("sumCoins() = %v, want %v", got, tc.want) + } + }) + } +}