ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 #10974 - 모든 순열
    알고리즘 2024. 4. 15. 22:29

     

     

    문제

    N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

    입력

    첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다. 

    출력

    첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.

    예제 입력

    3
    

    예제 출력

    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1

     

     


     

     

    이 문제는 파이썬의 itertools를 활용하면 아주 간단하게 풀린다.

     

    1) combinations(iterable, r) : iterable에서 원소 개수가 r개인 조합 뽑기

    • 조합은 중복을 허용하지 않는다
    for i in combinations(l,2):
    	print(i)
    
    '''
    (1, 2)
    (1, 3)
    (2, 3)
    '''

     

     

    2) permutations(iterable, r) : iterable에서 원소 개수가 r개인 순열 뽑기

    • r을 지정하지 않거나, r=None으로 하면 최대 길이의 순열이 리턴
    • 순열은 중복을 허용한 모든 경우의 수를 의미한다
    for i in permutations(arr, 3):
    	print(i)
        
    '''
    ('A', 'B', 'C')
    ('A', 'C', 'B')
    ('B', 'A', 'C')
    ('B', 'C', 'A')
    ('C', 'A', 'B')
    ('C', 'B', 'A')
    '''

     

     

    둘 다 

    import itertools 후

    itertools.combinations 혹은 itertools.permutations 형식으로 사용하면 된다.

     

    그렇다면 위 문제는 다음과 같이 간단하게 해결이 가능하다.

     

    import sys
    import itertools
    input = sys.stdin.readline
    
    n = int(input())
    arr = []
    
    for i in range(1, n + 1):
        arr.append(i)
    
    comb = itertools.permutations(arr, n)
    comb_list = list(comb)
    
    for i in comb_list:
        one_comb = str(i)
        one_comb = one_comb.replace("(", "").replace(",", "").replace(")", "")
        print(one_comb)

    '알고리즘' 카테고리의 다른 글

    백준 #2193 - 이친수  (0) 2024.04.26
    백준 #1463 - 1로 만들기  (2) 2024.04.18
    백준 #2108 - 통계학  (0) 2024.04.13
    백준 #1735 - 분수 합  (0) 2024.04.13
    백준 #12865 - 평범한 배낭  (0) 2024.04.09
Designed by Tistory.