728x90
SMALL
☀️ 오늘의 문제
def generate_lotto(numbers, selected, start, ____): # 목표 개수
if len(selected) == ____: # 로또 번호 개수 체크
print(' '.join(map(str, selected)))
return
for i in range(start, len(numbers)):
selected.append(numbers[i])
generate_lotto(numbers, selected, ____, target) # 다음 시작 인덱스
selected.pop()
while True:
input_data = list(map(int, input().split()))
if input_data[0] == 0:
break
k = input_data[0]
numbers = input_data[1:]
generate_lotto(numbers, [], 0, 6)
print()
🤔 어떻게 풀었을까?
💭 빈칸 1
- 문제에서 로또의 목표 개수는 6개로 고정되어 있기 때문에 더도 말고, 덜도 말고 6개로 고정시키면 됩니다.
- 따라서, generate_lotto() 함수에게는 target이라는 매개변수로 하여금 항상 접근할 수 있도록 지정해주었습니다.
def generate_lotto(numbers, selected, start, target): # 목표 개수
💭 빈칸 2
- 이어서 로또 번호 개수가 목표 개수인 6개가 만족되면, 만들어진 해당 조합을 출력해야 하기 때문에,
- 선택된 번호 리스트의 길이와 target인 6을 매 재귀마다 비교해줄 수 있게 해줍니다.
if len(selected) == ____: # 로또 번호 개수 체크
print(' '.join(map(str, selected)))
return
💭 빈칸 3
- 조합을 생성하기 위해서 여태까지 선택된 로또 번호와 중복된 값이 들어가면 안 되기 때문에, 선택된 숫자의 다음 인덱스부터 시작되게끔 설정해주어야 합니다.
- 그래서 i+1을 다음 재귀 호출의 start 값으로 넘겨주면, 로또 번호 리스트에서 현재 인덱스 다음 위치부터 숫자를 선택할 수 있습니다!
for i in range(start, len(numbers)):
selected.append(numbers[i])
generate_lotto(numbers, selected, i+1, target) # 다음 시작 인덱스
selected.pop()
728x90
LIST
'알고리즘 문제 > 탭고리즘' 카테고리의 다른 글
🗽 1517번: 버블 소트 (2) | 2025.02.14 |
---|---|
🥇 2206번: 벽 부수고 이동하기 (0) | 2025.02.13 |