IT, Computer

[백준] BOJ 15649, N과 M (1) 파이썬 Python

QUISEOL 2025. 2. 17. 22:11

썸네일


서론

이번 포스팅에서는 BOJ 15649 N과M(1) 문제를 풀어보도록 하겠다. 해당 문제를 보려면 여기로 가면 된다. 또한 어떻게 이 문제를 접근했고, 그렇게 푼 코드는 어떻게 되는 지 이어서 서술할 예정이다. 

 

BOJ 15649 풀이과정

BOJ 15649 N과 M을 보면, 1부터 N까지 길이가 M인 수열을 오름차순으로 나열하라고 되어있다. 그렇기에 첫번째로 1부터 N까지 자연수가 들어 있는 리스트를 만들었다. 또한 길이가 M인 수열이라는 걸 처음 봤을 때 수열에 꽂혀서 규칙이 있는 줄 알았는데 그냥 나열한 수준의 수열을 원한 거였다. 그렇기에 perumutaion이라고 판단했다. arr에서 M개를 뽑는데 순서에 따라 다른걸로 취급하는 조합이기 때문이다. 마지막으로 문제에서 요구한것은 오름차순 정렬이다. 처음에는 반복문을 돌면서 가장 오른쪽에 있는 원소부터 lambda x : x[i]를 사용하며 하나하나 오름차순으로 정렬했는데, 그럴 필요가 없었다. 파이썬 sort는 문제에서 요구하듯 첫번째 원소 뿐 아니라 모든 원소를 사전순으로 정렬해주기 때문이다. 이렇게 원소를 정렬한 뒤, res에 있는 원소들을 join함수를 사용해서 문제에서 요구한 방식으로 한 줄 한 줄 print를 해줬다.


 BOJ 15649 풀이 코드

from itertools import permutations
n, m  = map(int,input().split())
arr = [i for i in range(1,n+1)]
res = list(permutations(arr, m))
res.sort()
for tup in res:
    print(" ".join(map(str, tup)))