사용 언어 - Python3
문제 - 15649, 15650, 15651, 15652번
- 백준 백트래킹 세트로 공부하기
- 15649,15650,15651,15652번
- 15649번 중복X 수열
- 15650번 중복X 시작포인트 지정 수열
- 15651번 중복O 수열
- 15652번 중복O 시작포인트 지정 수열
- 15649번 [1 2] [1 3] [1 4] [2 1] [2 3] [2 4] [3 1] [3 2] [3 4] [4 1] [4 2] [4 3]
- 15650번 [1 2] [1 3] [1 4] [2 3] [2 4] [3 4]
- 15651번 [1 1] [1 2] [1 3] [1 4] [2 1] [2 2] [2 3] [2 4] [3 1] [3 2] [3 3] [3 4] [4 1] [4 2] [4 3] [4 4]
- 16652번 [1 1] [1 2] [1 3] [1 4] [2 2] [2 3] [2 4] [3 3] [3 4] [4 4]
정답
인프런 코테 강의 '2주만에 통과하는 알고리즘 코딩테스트(2023년)' 복습
재귀함수로 풀어보기
1. 15649번 (중복X 수열)
[1 2] [1 3] [1 4] [2 1] [2 3] [2 4] [3 1] [3 2] [3 4] [4 1] [4 2] [4 3]
arr 리스트에 방문하지 않은 i를 추가해준다.
def recur(number):
if len(arr) == m:
print(*arr)
return
for i in range(1,n+1):
if visited[i]:
continue
visited[i] = 1
arr.append(i)
recur(number+1)
arr.pop()
visited[i] = 0
arr = []
n, m = map(int,input().split())
visited = [0 for _ in range(n+1)]
recur(1)
2. 15650번 (중복X 시작포인트 지정 수열)
[1 2] [1 3] [1 4] [2 3] [2 4] [3 4]
arr 리스트에 있지 않은 i를 추가해준다.
for문의 시작 위치 = number ( number보다 큰 숫자부터 들어갈 수 있다 )
def recur(number):
if len(arr) == m:
print(*arr)
return
for i in range(number,n+1):
if i not in arr:
arr.append(i)
recur(i+1)
arr.pop()
arr = []
n, m = map(int,input().split())
recur(1)
3. 15651번 (중복O 수열)
[1 1] [1 2] [1 3] [1 4] [2 1] [2 2] [2 3] [2 4] [3 1] [3 2] [3 3] [3 4] [4 1] [4 2] [4 3] [4 4]
def recur():
if len(arr) == m:
print(*arr)
return
for i in range(1,n+1):
arr.append(i)
recur()
arr.pop()
n, m = map(int,input().split())
arr = []
recur()
4. 15652번 (중복O 시작포인트 지정 수열)
[1 1] [1 2] [1 3] [1 4] [2 2] [2 3] [2 4] [3 3] [3 4] [4 4]
def recur(number):
if len(arr) == m:
print(*arr)
return
for number in range(number,n+1):
arr.append(number)
recur(number)
arr.pop()
n ,m = map(int,input().split())
arr = []
recur(1)
'Algorithm > DFS&BFS&백트래킹&재귀' 카테고리의 다른 글
[백준] 2503번 숫자 야구 (재귀함수) (1) | 2023.10.30 |
---|---|
[백준] 수열 - 재귀함수 구현 정리 (2) (0) | 2023.10.30 |
[프로그래머스 lv3] 여행경로 (1) | 2023.04.22 |
[프로그래머스 lv3] 단어 변환 (0) | 2023.04.22 |
[Python3] 백준 1697번 숨바꼭질 (0) | 2023.04.19 |
댓글