장 준
씨포유
장 준
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • 프로그래밍언어 (15)
      • c언어 (10)
      • 파이썬 (0)
      • 자바스크립트 (5)
    • PS (58)
      • 알고리즘 이론 (18)
      • 프로그래머스 (5)
      • 백준 (35)
    • CS (16)
      • 자료구조 (5)
      • 운영체제 (3)
      • 네트워크 (5)
      • 데이터베이스 (0)
      • 기초 지식 (3)
    • 브랜드 (1)

블로그 메뉴

  • 태그

인기 글

태그

  • DFS
  • JavaScript
  • Priority Queue
  • Stack
  • 파이썬
  • DP
  • CS
  • python3
  • 알고리즘
  • Implementation
  • 자바스크립트
  • Visual Studio
  • PS
  • Network
  • JS
  • codesandbox
  • 씨포유
  • 백준
  • 자료구조
  • bitmask
  • 프로그래머스
  • nodejs
  • 코딩테스트
  • 프로그래밍언어
  • C
  • recursion
  • Kruskal algorithm
  • pypy3
  • BFS
  • 기초 지식

최근 댓글

최근 글

hELLO · Designed By 정상우.
장 준

씨포유

[백준(BOJ)] #1182- 부분수열의 합 (파이썬, PyPy3)
PS/백준

[백준(BOJ)] #1182- 부분수열의 합 (파이썬, PyPy3)

2022. 8. 16. 14:13
728x90

문제

 

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

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 


문제 풀이

n개의 정수에서 가능한 모든 부분 수열을 구한 뒤(*Brute Force) 부분 수열의 합이 s가 되는 경우를 찾아 더해주면 됩니다.

 

Brute Force 알고리즘: Brute(무식한) + Force(힘) 무식하게 모든 경우의 수를 탐색하는 방법으로 완전 탐색을 의미함.

 

n개의 정수 -7, -3, -2, 5, 8

s = 0

 

크기가 1인 부분 수열

 

(-7), (-3), (-2), (5), (8)

 

크기가 2인 부분 수열

(-7, -3), (-7, -2), (-7, 5), (-7, 8), (-3, -2), (-3, 5), (-3, 8), (-2, 5), (-2, 8), (5, 8)

 

크기가 3인 부분 수열

(-7, -3, -2), (-7, -3, 5), (-7, -3, 8), (-7, -2, 5), (-7, -2, 8), (-7, 5, 8), (-3, -2, 5), (-3, -2, 8), (-3, 5, 8), (-2, 5, 8)

((-3, -2, 5)에서 부분 수열의 합이 s가 됨)

 

크기가 4인 부분 수열 

(-7, -3, -2, 5), (-7, -3, -2, 8), (-7, -3, 5, 8), (-7, -2, 5, 8), (-3, -2, 5, 8)

 

크기가 5인 부분 수열

(-7, -3, -2, 5, 8)

 

따라서 답은 1

 

부분 수열은 조합 공식 nCr으로 구할 수 있고, 파이썬에서는 itertools라이브러리에서 combinations함수를 제공하기 때문에 이 함수를 사용하여 풀었습니다.

 


구현

코드

import sys
from itertools import combinations
input = sys.stdin.readline

if __name__ == "__main__":
    n, s = map(int, input().split())
    a = list(map(int, input().split()))
    
    res = 0
    
    for i in range(1, n+1):
        for com in combinations(a, i):
            if sum(com) == s:
                res += 1
                
    print(res)

결과

 

728x90
반응형
저작자표시 (새창열림)

'PS > 백준' 카테고리의 다른 글

[백준(BOJ)] #9328- 열쇠 (파이썬, PyPy3)  (0) 2022.08.18
[백준(BOJ)] #1208- 부분수열의 합 2 (파이썬, PyPy3)  (0) 2022.08.17
[백준(BOJ)] #14728- 벼락치기 (파이썬, PyPy3)  (0) 2022.08.15
[백준(BOJ)] #12865- 평범한 배낭 (파이썬, PyPy3)  (0) 2022.08.12
[백준(BOJ)] #1005- ACM Craft (파이썬, PyPy3)  (2) 2022.08.10
    'PS/백준' 카테고리의 다른 글
    • [백준(BOJ)] #9328- 열쇠 (파이썬, PyPy3)
    • [백준(BOJ)] #1208- 부분수열의 합 2 (파이썬, PyPy3)
    • [백준(BOJ)] #14728- 벼락치기 (파이썬, PyPy3)
    • [백준(BOJ)] #12865- 평범한 배낭 (파이썬, PyPy3)
    장 준
    장 준
    C4U(Computer For You)

    티스토리툴바