-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
8. 순열구하기 (DFS) 질문입니다.
23.01.04 19:54 작성 조회수 291
0
def DFS(L):
global cnt
# 종료 => 즉 출력
if L == m:
# res에 m개를 뽑은 수를 저장했으므로 출력한다.
for j in range(m):
print(res[j], end=' ')
cnt += 1
print()
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())
# 순열이기때문에 겹치지않게 하기 위해 0과 1로 구분.
ch = [0] * (n + 1)
res = [0] * m
cnt = 0
DFS(0)
print(cnt)
궁금한 점이 있어 질문드립니다. 교수님이 짜주신 코드를 보면 for j in range(L)이라고 나와있습니다. 저는 처음에 m번을 뽑아야해서 인덱스가 m개만 필요하므로 저는 m번만큼 반복문이 돌아 출력할 수 있도록 코드를 짰는데 L이 아닌 m으로 짜도 코드가 정상 작동했습니다. 이렇게 짜도 혹시 괜찮은게 맞는지 여부가 궁금합니다.
또한 cnt+=1 을 for j문 안에 넣었을 경우에 12가 출력되었습니다. 왜그런지 알꺼같으나 1 2 1 3 2 1 2 3 3 1 3 2 이거를 모두 한개씩 for문 돌면서 받아들여 12라고 출력되는거 같기는한데 이게 맞는건가요?
그리고 마지막으로 print()의 위치가 교수님의 코드에는 print() 다음 cnt+= 1 이렇게 되있는데 저는 순서를 cnt+=1 print()이렇게 했는데 답에는 문제가 없었습니다. 혹시 순서를 변경해도 코드 실행 속도에 영향을 미치지 않는지 여부가 궁금합니다.
항상 좋은강의 감사합니다.
답변을 작성해보세요.
0
김태원
지식공유자2023.01.08
안녕하세요^^
if L ==m: 일때 출력하므로 L값과 m값은 같은 값이라 아무거나 해도 됩니다.
네. 생각한게 맞습니다.
cnt += 1과 print() 순서는 아무렇게 해도 상관없습니다.
답변 1