관리 메뉴

솜씨좋은장씨

[BaekJoon] 6603번 : 로또 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 6603번 : 로또 (Python)

솜씨좋은장씨 2021. 8. 18. 15:06
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 로또 입니다.

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

Solution

from itertools import combinations

def lotto(numbers):
    numbers = numbers.split()
    
    num, numbers = numbers[0], numbers[1:]
    
    lotto_comb = list(combinations(numbers, 6))
    
    lotto_comb = [" ".join(list(map(str, sorted(list(map(int, comb)))))) for comb in lotto_comb]
    
    for comb in lotto_comb:
        print(comb)
    
    
    
if __name__ == "__main__":
    is_first = True
    while True:
        input_numbers = input()
        
        if input_numbers == "0":
            break
        if not is_first:
            print()
        lotto(input_numbers)
        is_first = False

Solution 풀이

조합을 생성해주는 itertools의 combinations와 리스트의 전체 데이터의 형식을 바꾸어주는 map을 활용하여 

문제를 풀었습ㄴ디ㅏ.

먼저 입력 받은 숫자 목록을 split으로 나누어 줍니다.

7 1 2 3 4 5 6 7 -> [ '7', '1', '2', '3', '4', '5', '6', '7' ]

그러면 맨 앞의 숫자는 전체 숫자의 개수 뒤의 나머지 숫자는 내가 로또 조합에 사용할 숫자들 입니다.

이를 slicing 방법으로 나누었습니다.

num, numbers = numbers[0], numbers[1:]
# 이럴 경우 num = '7', numbers = [ '1', '2', '3', '4', '5', '6', '7' ]

 

그 다음 combinations를 활용하여 주어진 번호로 만들 수 있는 로또번호 조합을 만들어줍니다.

lotto_comb = list(combinations(numbers, 6))

이를 숫자의 크기를 기준으로 오름차순으로 정렬된 형태로 문자열을 만들어야하므로

각 조합의 데이터의 형식을 map을 활용하여 int 의 값을 가지는 리스트로 바꾸고 sorted로 오름차순 정렬한 뒤

문자열로 join 하기 위해서 map을 활용하여 다시 str로 형식을 바꾸고 join한 값들을 만들어줍니다.

lotto_comb = [" ".join(list(map(str, sorted(list(map(int, comb)))))) for comb in lotto_comb]

마지막으로 각 조합을 순서대로 출력해주면 끝! 입니다.

 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments