dev/algorithm
BOJ / 14888๋ฒ / ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ [Go]
crscnt
2020. 7. 29. 21:00
๐ฉ๐ป๐ป ๋ฌธ์
14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(2 ≤ N ≤ 11)๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ A1, A2, ..., AN์ด ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 100) ์ ์งธ ์ค์๋ ํฉ์ด N-1์ธ 4๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ฐจ๋ก๋๋ก ๋ง์ (+)์ ๊ฐ์, ๋บ์ (-)์ ๊ฐ์, ๏ฟฝ๏ฟฝ
www.acmicpc.net
โ๐ป ํ์ด
๐จ Go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n int
fmt.Fscanln(reader, &n)
var numbers = make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscanf(reader, "%d ", &numbers[i])
}
var counts = make([]int, 4)
for i := 0; i < 4; i++ {
fmt.Fscanf(reader, "%d ", &counts[i])
}
var max, min, sum, idx = -1000000000, 1000000000, numbers[0], 0
solve(numbers, counts, &max, &min, sum, idx)
fmt.Fprintln(writer, max)
fmt.Fprintln(writer, min)
}
func solve(numbers, counts []int, maxptr, minptr *int, sum, idx int) {
if idx == len(numbers)-1 {
if *maxptr < sum {
*maxptr = sum
}
if *minptr > sum {
*minptr = sum
}
return
}
if counts[0] > 0 {
counts[0]--
solve(numbers, counts, maxptr, minptr, sum+numbers[idx+1], idx+1)
counts[0]++
}
if counts[1] > 0 {
counts[1]--
solve(numbers, counts, maxptr, minptr, sum-numbers[idx+1], idx+1)
counts[1]++
}
if counts[2] > 0 {
counts[2]--
solve(numbers, counts, maxptr, minptr, sum*numbers[idx+1], idx+1)
counts[2]++
}
if counts[3] > 0 {
counts[3]--
solve(numbers, counts, maxptr, minptr, sum/numbers[idx+1], idx+1)
counts[3]++
}
}
728x90