https://www.acmicpc.net/problem/15649
https://www.acmicpc.net/problem/15650
https://www.acmicpc.net/problem/15651
https://www.acmicpc.net/problem/15652
N과M(1)문제는 이전 포스트에서 다루었다.
https://hidemasa.tistory.com/96
N과 M(1)에서는 permutations()함수를 사용했었다.
N과 M(1)과 다르게 오름차순이어야 하므로 순서 상관없이 조합하는 combinations()를 사용한다.
import sys
from itertools import combinations
input = sys.stdin.readline
N,M = map(int, input().split())
C = combinations([str(i) for i in range(1, N+1)], M)
print('\n'.join(map(" ".join,C)))
같은 수를 여러번 골라도 되므로 중복 순열을 고르는 문제다. product()함수를 사용한다.
#15651 N과M(3)
import sys
from itertools import product
input = sys.stdin.readline
N,M = map(int, input().split())
P = product([str(i) for i in range(1, N+1)], repeat=M)
for num in P:
print(' '.join(map(str,num)))
(3)과 다르게 비내림차순이어야 하므로 순서를 상관 안 하는 중복조합문제다.
#15652 N과M(4)
import sys
from itertools import combinations_with_replacement
input = sys.stdin.readline
N, M =map(int, input().split())
C = combinations_with_replacement([i for i in range(1, N+1)], M)
for num in C:
print(' '.join(map(str,num)))
순열조합 문제는 파이썬이 다른 언어에 비해서 itertools 라이브러리가 상당히 사기(?)다.
코딩테스트 준비할때도 순열조합 문제가 나온 경우에는 파이썬으로 푸는 등 요령을 쓰는 게 좋을 듯 싶다.
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/BOJ/알고리즘/파이썬(python)]#11725_트리의 부모 찾기[트리/그래프] (0) | 2021.09.11 |
---|---|
[백준/BOJ/알고리즘/파이썬(python)]#1197_최소 스패닝 트리[MST/트리/그래프] (0) | 2021.09.11 |
[백준/BOJ/알고리즘/파이썬(Python)]#9372_상근이의 여행[트리/그래프] (0) | 2021.09.10 |
[백준/BOJ/알고리즘/파이썬(python)]#14888_연산자 끼워넣기 (0) | 2021.09.08 |
[백준/BOJ/알고리즘/파이썬(Python)/C++]#14889_스타트와 링크 (0) | 2021.09.07 |