inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

8. 순열 구하기(DFS)

8. 순열구하기 (DFS) 질문입니다.

431

김용민

작성한 질문수 74

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()이렇게 했는데 답에는 문제가 없었습니다. 혹시 순서를 변경해도 코드 실행 속도에 영향을 미치지 않는지 여부가 궁금합니다.

항상 좋은강의 감사합니다.

python 코테 준비 같이 해요!

답변 1

0

김태원

안녕하세요^^

  1. if L ==m: 일때 출력하므로 L값과 m값은 같은 값이라 아무거나 해도 됩니다.

  2. 네. 생각한게 맞습니다.

  3. 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