문제

참고한 코드
n, m = map(int, input().split())
s= []
def dfs():
if len(s) == m:
print(' '.join(map(str, s)))
return
for i in range(1, n+1):
if i not in s:
s.append(i)
dfs()
s.pop()
dfs()
> 참고한 블로그
https://jamesu.dev/posts/2020/04/13/baekjoon-problem-solving-15649/
백준 문제 풀이: 15649 - N과 M (1)
Dev Blog by James Minsu Jeon
jamesu.dev
> join 함수에 관한 블로그
https://blockdmask.tistory.com/468
[python] 파이썬 join 함수 정리 및 예제 (문자열 합치기)
안녕하세요. BlockDMask입니다. 오늘은 파이썬에서 리스트를 문자열로 일정하게 합쳐주는 join 함수에 대해서 알아보려고 합니다. join 함수는 문자열을 다룰 때 유용하게 사용할 수 있는 함수이니
blockdmask.tistory.com
> 이번에 join 함수와 백트래킹에 대한 의미를 알아보았다!!!
내가 해석한 코드 설명
n, m = map(int, input().split())
s= []
> n, m 은 자연수 N, M을 받을 변수입니다.
> s 변수는 값을 출력하기 위한 빈 리스트입니다.
def dfs():
if len(s) == m:
print(' '.join(map(str, s)))
return
for i in range(1, n+1):
if i not in s:
s.append(i)
dfs()
s.pop()
> 먼저 if문을 사용하여 s 변수의 길이가 m 변수와 같다면 ' '.join(map(str, s)) 을 추출하도록 되어있다.
> 이 의미는 s 변수는 m개의 값만큼의 길이일 때마다 값을 추출해야하기 때문이다.
> 그리고 s 변수는 리스트로서 join 함수를 사용하면 join 앞에 있는 문자열이 각 리스트의 값 사이에 들어가게 된다.
> 예제 출력을 보면 각 값은 빈 칸을 두고 출력되기 때문에 ' '.join 함수를 사용한 것이다.
> 그리고 for 문(반복문)을 range(1, n +1) 범위만큼 사용하고 dfs 를 사용하여 s 변수에 같은 값이 존재하지 않으면 s 변수에 값을 추가하고, 그와 동시에 재귀함수를 사용하여 dfs() 를 다시 적용시킨다.
> 처음에 이해가 잘가지 않았는데, 이렇게 하면 s 변수에 들어간 값을 통해 얻을 수 있는 값들은 전부 얻고 나오게 된다.
> 그리고 다시 그 값을 pop() 함수를 통해 빼주면서 반복된 값을 없게 해준다.
'Coding > 백준' 카테고리의 다른 글
| [15651번] N과 M (3) with Python (0) | 2022.07.26 |
|---|---|
| [15650번] 백트래킹 - N과 M(2) with Python (★) (0) | 2022.07.26 |
| [10773번] 제로 with Python (0) | 2022.07.26 |
| [1475번] 구현 - 방 번호 with Python (0) | 2022.07.25 |
| [11866번] 구현 - 요세푸스 문제 0 with Python (★) (0) | 2022.07.25 |