티스토리 뷰
문제 포인트
- 하나의 자연수 N이 주어졌을 때, 1~N까지의 원소를 갖는 부분집합을 모두 출력해야한다. 이때 공집합의 출력은 제외한다.
입력 예제
3
출력 예제
1 2 3
1 2
1 3
1
2 3
2
3
생각
재귀 함수를 사용하여 이 문제를 풀기 위해서는 상태 트리를 먼저 직접 그려보는 것이 좋다.
입력 예제가 3이므로 3을 예로 상태트리를 그려보면 다음과 같이 그려질 것이다.
- 1의 경우: 1을 원소로 사용한다, 사용하지 않는다의 두가지 갈래로 나뉜다.
- 각 갈래에서 원소에 1을 더한 상태에서 같은 방법으로 각각 두가지 갈래를 나눠 사용하는 경우와 사용하지 않는 경우를 판별한다.
- n + 1의 경우까지 이 과정을 반복한다.
위의 상태 트리를 코드로 구현하면 다음과 같다.
def recursive(value):
if value == n + 1: # 입력보다 +1 큰 수에서 탐색 종료하기 때문에
for i in range(1, n + 1):
if check[i] == 1:
print(i, end=" ")
print()
else:
check[value] = 1 # 사용하는 경우
recursive(value + 1)
check[value] = 0 # 사용하지 않는 경우
recursive(value + 1)
n = int(input())
check = [0] * (n + 1) # 숫자를 사용한다, 하지 않는다 신호를 주기 위해서
recursive(1)
재귀 함수를 사용할 때는 스택에 복귀 주소를 염두에 두는 것이 코드 작성할 때 덜 헷갈리는 것 같다.
'Problem solution' 카테고리의 다른 글
중복순열 구하기 (0) | 2022.07.27 |
---|---|
바둑이 승차 (0) | 2022.07.26 |
합이 같은 부분집합 (0) | 2022.07.26 |
최소힙 (0) | 2022.07.25 |
최대힙 (0) | 2022.07.25 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CS
- 빅데이터
- 네트워크
- sqoop
- 프로그래머스
- logstash
- Hadoop
- 백준
- kubernetes
- 이코테
- DFS
- mahout
- DP
- heapq
- Elasticsearch
- 파이썬
- Algorithm
- Flutter
- 빅데이터를지탱하는기술
- Python
- HDFS
- GROK
- OS
- BOJ
- CSAPP
- Espher
- cka
- elasticsaerch
- kafka
- oozie
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함