알고리즘
백준 15649 풀이 (재귀함수, 백트래킹)
https://github.com/Dev-Guccin
2021. 2. 15. 20:03
음 백트래킹이 먼지 몰랐다. 그래서 여기저기 기웃거려본 결과 트리를 만들때 불필요한걸 쳐내면서 트리를 만드는거 같다. 물론 이 문제에 백트래킹을 어떻게 적용해야하는지 전혀 이해못했다.
그냥 재귀함수로 적용해서 풀어보자! 라는 마인드로 풀었는데 어찌저찌 풀리긴 풀렸다.
순서는 다음과 같다.
1. 빈 리스트, n, m을 인자로 넣어준다.
2. for 을 이용하여 사용되지 않은 숫자를 리스트에 추가하며 재귀함수를 실행시킨다.
3. m을 하나씩 줄여서 m이 0이 되면 리스트에 저장된 값을 출력해준다.
n,m = map(int,input().split())
Map=[i for i in range(1,n+1)]
def back(tlist, n,m):
if m == 0:
for i in tlist:
print(Map[i],end=' ')
print()
return
for i in range(n):
if i not in tlist:
tlist.append(i)
back(tlist,n,m-1)
tlist.pop()
back([],n,m)
그렇게 풀었더니 어찌저찌 풀렸다.
재귀함수가 너무 어렵게 느껴졌는데 이번에 쉬운 문제를 풀었더니 나름 자신감이 상승했다. 좋다.