Cộng đồng Hỏi & Đáp của Inflearn
안녕하세요? 강의에서 말씀해주신 방법의 응용에 대해 질문 드립니다.
Đã giải quyết
Viết
·
277
0
혹시, 강의에 나오지 않은 다른 문제에 대한 질문은 받지 않으신다면 아래 내용은 읽지 않으셔도 됩니다!!
안녕하세요? 강의에서 말씀해주신 방법의 응용에 대해 질문 드립니다.
이 문제를 열심히 풀어보고 난 뒤 숙달을 위해 백준사이트의 N과M 시리즈 문제들을 풀어보고 있습니다.
그 중, 다른 문제들은 해결했지만, '원소간 중복을 허용하는 조합'을 뽑아내는 문제를 해결하는데 어려움이 있습니다. 아래 링크가
"N개의 숫자 중, 중복을 허용하여 M개를 뽑아 만들 수 있는 '조합'을 출력하는 문제"입니다.
https://www.acmicpc.net/problem/15657
이 문제를 해결하고자 한다면, 선생님께서 알려주신 코드를 어떻게 고쳐야 풀 수 있을까요?
위 질문 외에, 혹시 조금 더 상급 수준의 코스를 만들어 올려주실 생각이 있으신지 궁금합니다. 선생님의 코스를 따라가며 많이 실력이 늘었기 때문입니다.
무더워가 어느정도 지나가고, 날이 점점 선선해지는 듯한 계절입니다. 이럴때일수록 몸 건강히 챙기시고, 코로나도 각별히 유의하시기 바랍니다.
Quiz
재귀 함수에서 print 문을 재귀 호출 뒤에 두면 출력이 역순으로 되는 이유가 무엇일까요?
전역 변수 충돌 때문에
종료 조건이 없어서
스택에 쌓였다가 역순으로 처리돼서
지역 변수 우선순위 때문에
Câu trả lời 2
1
제공한 조합 코드에서 DFS호출부분을
DFS(L+1, i) 와 같이 바꾸면 중복조합이 됩니다. 문의하신 백준문제를 조합문제 코드를 수정해서 풀어보면 아래와 같습니다.
def DFS(L, s):
if L==m:
for i in range(m):
print(arr[res[i]], end=' ')
print()
else:
for i in range(s, n):
res[L]=i
DFS(L+1, i)
n, m=map(int, input().split())
arr=list(map(int, input().split()))
arr.sort()
res=[0]*(n+1)
cnt=0
DFS(0, 0)
0
오.. 정말 대단하십니다. 알려주신 방법을 잘 응용하기만 한다면 정말 다양한 유형의 문제들을 풀 수 있군요!! 좋은 스킬 알려주셔서 감사합니다! 꼭 완벽히 제것으로 만들어서 좋은 결과를 내도록 하겠습니다!!





