dev/algorithm

BOJ / 1182번 / λΆ€λΆ„μˆ˜μ—΄μ˜ ν•© [Go][Python3]

crscnt 2021. 3. 21. 21:00

πŸ‘©πŸ»‍πŸ’» 문제

 

1182번: λΆ€λΆ„μˆ˜μ—΄μ˜ ν•©

첫째 쀄에 μ •μˆ˜μ˜ 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Nκ³Ό μ •μˆ˜ Sκ°€ 주어진닀. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) λ‘˜μ§Έ 쀄에 N개의 μ •μˆ˜κ°€ 빈 칸을 사이에 두고 주어진닀. μ£Όμ–΄μ§€λŠ” μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ€ 100,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

www.acmicpc.net


✍🏻 ν’€μ΄

🎨 Go

// https://www.acmicpc.net/problem/1182
package main

import (
	"bufio"
	"fmt"
	"os"
)

var (
	count int
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, s int
	fmt.Fscanln(reader, &n, &s)
	var seq = make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscanf(reader, "%d ", &seq[i])
	}
	computeSubsequenceCount(0, 0, s, seq)
	fmt.Fprintln(writer, count)
}

func computeSubsequenceCount(index, sum, aim int, seq []int) {
	if index > len(seq)-1 {
		return
	}
	sum += seq[index]
	if sum == aim {
		count++
	}
	computeSubsequenceCount(index+1, sum, aim, seq)            // ν˜„μž¬ 인덱슀 값을 λ”ν•˜μ§€ μ•ŠλŠ” 경우
	computeSubsequenceCount(index+1, sum-seq[index], aim, seq) // ν˜„μž¬ 인덱슀 값을 λ”ν•˜λŠ” 경우
}

🎨 Python3

# https://www.acmicpc.net/problem/1182
import sys

count = 0
seq = []

def compute_subsequence_count(index, sum, aim):
    global count
    if index > len(seq)-1:
        return
    sum += seq[index]
    if sum == aim:
        count += 1
    compute_subsequence_count(index+1, sum, aim)
    compute_subsequence_count(index+1, sum-seq[index], aim)

if __name__ == "__main__":
    n, s = list(map(int, sys.stdin.readline().split()))
    seq = list(map(int, sys.stdin.readline().split()))
    compute_subsequence_count(0, 0, s)
    print(count)
728x90