문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.
문제 유형 보기
더보기
https://www.acmicpc.net/problem/6603순열과 조합
풀이
import sys
input = sys.stdin.readline
# 1, 2, ..., 49에서 6개를 고를 건데,
# 49가지 중 k개 먼저 뽑아서 집합 S 만들거고,
# 그 S를 가지고 6개를 뽑을 거임.
# 입력 : k랑 S에 포함되는 수 일렬로
# 출력 : 6개 수 고른 모든 방법.
# 이거 49개 중에서 순서를 고려하지 않으며, 중복을 고려하지 않는,
# 즉 조합 문제임. S 집합을 가지고 kC6을 하면 됨.
def combinations(current, start):
if len(current) == 6:
answer.append(current[:])
return
for i in range(start, k):
current.append(S[i])
combinations(current, i + 1)
current.pop()
while(True):
k, *S = map(int, input().split())
# 7, [1, 2, 3, 4, 5, 6, 7]
if k == 0:
break
answer = []
combinations([], 0)
for line in answer:
print(*line)
print()
# 여담) 백준에서는 마지막 줄에 추가적인
# 개행 문자가 출력되어도 정답으로 인정됨.
250223 재풀이
from itertools import combinations
import sys
input = sys.stdin.readline
# 1 ~ 49에서 k개 뽑아 집합 S를 만들고, 여기서 수 6개 고를 경우의 수
# 근데, 사전 순 출력 -> 순서 고려x 중복 허용x -> 조합
# 그냥 kC6 구해서 오름차순 정렬
# 입력 : k, 집합 S
# 입력 마지막에 0 -> 반복문
while True:
k, *S = map(int, input().split())
if k == 0:
break
# lotto = [list(combination) for combination in combinations(S, 6)]
# for line in lotto:
# print(*line)
for line in combinations(S, 6):
print(*line)
print()
'Algorithms & Languages > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[Python/DailyAlgo] 97. N-Rook Problem (0) | 2025.02.24 |
---|---|
[Python/백준] 16922. 로마 숫자 만들기 (0) | 2025.02.24 |
[Python/DailyAlgo] 99, 100, 101, 102. 순열, 조합, 중복순열, 중복조합 (0) | 2025.02.23 |
[Python/백준] 7562. 나이트의 이동 (0) | 2025.02.21 |
[Python/백준] 7569. 토마토 3차원 (0) | 2025.02.21 |