백준6603: 로또

반응형
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