인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.
파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의
파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...
www.inflearn.com

내 풀이
#내 풀이 //답은 맞음
def DFS(L):
global res, cnt
if L == m:
if len(res) != len(set(res)):
pass
else:
for i in res:
print(i, end = ' ')
print()
cnt += 1
else:
for i in range(1, n+1):
res[L] = i
DFS(L+1)
if __name__ == "__main__":
n, m = map(int, input().split())
res = [0] * m
cnt = 0
DFS(0)
print(cnt)
다른 부분은 강사님과 동일한데
나는 중복순열을 모두 구한 다음에
set 함수 기능을 이용하여 원소중에 같은 숫자가 있으면
제외하는 방식으로 순열을 만들어봤다
강의 풀이
#강의 풀이
def DFS(L):
global res, cnt
if L == m:
for j in range(L):
print(res[j], end = ' ')
print()
cnt += 1
else:
for i in range(1, n+1):
if ch[i] == 0:
ch[i] = 1
res[L] = i
DFS(L+1)
ch[i] = 0
if __name__ == "__main__":
n, m = map(int, input().split())
res = [0] * m
ch = [0] * (n+1)
cnt = 0
DFS(0)
print(cnt)
강사님은 그 숫자가 쓰였는지 안쓰였는지 검사하는 ch 배열을 만들어
처음 DFS 를 순환할때 ch 값을 1로 설정하고
순열에 i를 추가한다음
그 아래 DFS가 맨 끝에 닫을땐 return 하기전에 다시 ch 값을 0으로 풀어주었다.
'알고리즘 (Python)' 카테고리의 다른 글
최대점수 구하기(DFS) (0) | 2022.04.04 |
---|---|
수열 추측하기(순열, 파스칼 응용) (0) | 2022.04.02 |
동전 교환 (Cut Edge Tech) (0) | 2022.04.02 |
중복순열 구하기(DFS) (0) | 2022.04.02 |
바둑이 승차 (Cut Edge Tech) (0) | 2022.04.01 |
댓글