난이도 : D3
문제번호 : 4837
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
1부터 12까지의 숫자를 원소로 가진 집합 A가 있다. 집합 A의 부분 집합 중 N개의 원소를 갖고 있고, 원소의 합이 K인 부분집합의 개수를 출력하는 프로그램을 작성하시오. 예를 들어 N = 3, K = 6 경우, 부분집합은 { 1, 2, 3 } 경우 1가지가 존재한다. |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. ( 1 ≤ T ≤ 50 ) 테스트 케이스 별로 부분집합 원소의 수 N과 부분 집합의 합 K가 여백을 두고 주어진다. ( 1 ≤ N ≤ 12, 1 ≤ K ≤ 100 ) |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
3 3 6 5 15 5 10 |
#1 1 #2 1 #3 0 |
2. 문제풀이
파이썬 Intermediate 2일차 문제입니다. 부분집합의 합 문제인데요 주어진 숫자들을 조합하여 더해서 원하는 숫자를 몇개까지 만들수 있냐를 물어보는 문제였습니다. 따라서 조합을 만들줄 알아야하는데 dfs를 이용하여 문제를 풀었습니다.
|
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
def recursion(count, targetNum, currentCount = 0, result = 0, temp_sum = 0, is_index = 0):
#리턴조건
if currentCount >= count : return result
#1부터 12까지
for k in range(is_index, 12):
#임시합을 더해본다.
t_s = temp_sum+k+1
#더한값이 타겟넘과 같고 더한 횟수가 목표횟수와 같다면 결과에 추가
if t_s == targetNum and count == currentCount+1: return result + 1
#재귀로 계산한다.
result = recursion(count, targetNum, currentCount+1,result, t_s, k+1)
return result
T = int(input())
for t in range(1, T+1):
count, targetNum = map(int, input().split())
result = recursion(count, targetNum)
print("#{} {}".format(t, result))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
특별한정렬 Python(SW Expert Academy) (0) | 2020.03.01 |
---|---|
이진탐색 Python(SW Expert Academy) (0) | 2020.02.29 |
색칠하기 Python(SW Expert Academy) (0) | 2020.02.27 |
min, max Python(SW Expert Academy) (0) | 2020.02.26 |
구간합 Python(SW Expert Academy) (1) | 2020.02.25 |
댓글