반응형
SMALL
📌 문제를 뜯어보자
- 숫자 1부터 49까지 중에서,
- 테스트 케이스마다 몇 개의 숫자(k개)가 주어지고,
- 그 중 6개를 뽑는 모든 조합을 출력해야 함.
- 마지막 줄에 0이 들어오면 입력 종료.
- 각 케이스는 출력할 때 조합을 오름차순, 케이스 사이에는 빈 줄 하나.
예를 들어 7 1 2 3 4 5 6 7이 들어오면,
1~7 중에서 6개 뽑는 조합들을 전부 출력해야 되는 식.
🤔 접근 방법
처음엔 조합을 직접 구현해볼까 했는데,
파이썬에선 이럴 때 itertools 모듈의 combinations가 진짜 편하다.
그냥 combinations(리스트, 6) 하면 알아서 6개짜리 조합을 다 만들어준다.
그래서 입력만 잘 처리하고, 조합 돌려서 출력하면 끝.
from itertools import combinations
def func(arr):
for i in arr:
c_lst=list(combinations(i[1:],6))
# print(c_lst)
for j in c_lst:
print(' '.join(map(str, j)))
print()
arr=[]
while True:
lst=list(map(int,input().split()))
if lst[0]==0:
break
arr.append(lst)
func(arr)
🔍 코드 설명 (요약)
- i[1:] → 숫자 집합만 슬라이싱해서 조합 생성.
- combinations(…, 6) → 6개 뽑는 조합 생성.
- join 써서 공백으로 출력.
- 테스트 케이스 끝나면 print() 한 번 더 해줘서 줄바꿈 처리.
🧠 느낀 점
처음 문제 봤을 땐 백트래킹 돌려야 하나? 싶었는데,
조합 문제는 combinations 하나로 깔끔하게 해결된다.
입출력만 잘 맞춰주면 크게 복잡한 로직도 없음.
오히려 이런 문제는 출력 형식을 정확하게 맞추는 게 더 중요함.
빈 줄 하나 빠뜨리면 바로 틀리는 스타일.
반응형
LIST
'알고리즘 > 백준' 카테고리의 다른 글
백준 2294번: 동전2 (0) | 2024.10.03 |
---|---|
백준 14888번: 연산자 끼워넣기 (0) | 2024.08.05 |
백준1256번: 사전 (0) | 2024.08.05 |
백준 1759번: 암호 만들기 (0) | 2024.07.08 |
백준 11051번: 이항 계수 2 (0) | 2024.07.08 |