8. 순열구하기 (DFS) 질문입니다.
431
작성한 질문수 74
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()이렇게 했는데 답에는 문제가 없었습니다. 혹시 순서를 변경해도 코드 실행 속도에 영향을 미치지 않는지 여부가 궁금합니다.
항상 좋은강의 감사합니다.
답변 1
0
안녕하세요^^
if L ==m: 일때 출력하므로 L값과 m값은 같은 값이라 아무거나 해도 됩니다.
네. 생각한게 맞습니다.
cnt += 1과 print() 순서는 아무렇게 해도 상관없습니다.
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
79
2
스택에서 ')'을 만나는 경우
0
81
3
문제가 어디있나요?
0
68
2
변수 or 함수명
0
63
1
침몰하는 타이타닉 문제 질문입니다
0
60
1
AA.py 책점 에러
0
60
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
112
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
161
2
문제 링크가있나여?
0
148
2
채점기 Time Limit Exceeded 오류 문의
1
166
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
95
0
5번 틀림
0
115
0
오류원인?
0
99
0
리스트 선언
0
108
1
침몰하는 타이타닉(그리디) 문제 질문
0
111
1
알고리즘
0
70
1
코딩테스트
0
93
1
DFS 순서 질문드립니다.
0
129
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





