본문 바로가기

Algorithm & SQL/Baekjoon

[Algorithm] [Python] BOJ/백준 - 15649_N과M(1)

15469 - N과 M(1)



#INDEX

1.문제 설명

2.입력

3.출력

4.예제 입출력

5.제출 코드


문제 설명


자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열

입력


첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)


출력


한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

수열은 사전 순으로 증가하는 순서로 출력해야 한다.


예제 입출력


input: 3 1

output:
1
2
3

input: 4 2

output:

1 2

1 3

1 4

2 1

2 3

2 4

3 1

3 2

3 4

4 1

4 2

4 3


제출 코드


import sys
import itertools

n,m = map(int, sys.stdin.readline().split())

n = [i+1 for i in range(n)]

p = list(itertools.permutations(n, m))

for value in p:
    # print(*(list(value)))   
    print(' '.join(map(str, value)))  

위 문제는 순열을 알고있는지 묻는 문제다.

n,m을 입력받고 niterable한 자료형으로 변경해주기 위해
n = [i+1 for i in range(n)] 구문을 통해 1~n 까지의 정수를 원소로 갖는 리스트를 생성한다.

이후, itertools.permutations를 이용해 문제 조건에 맞는 순열을 생성한다.

생성한 순열들은 기본적으로 튜플 자료형으로 생성되며 이를 순회하며 list로 캐스팅하여 모든 원소를 출력해준다.