백준 9094 - 수학적 호기심
2020-12-23
순열과 조합.
itertools
모듈의 permutations
와 combinations
함수를 이용해 순열과 조합 구하기.
from itertools import *
for _ in range(int(input())):
n, m = map(int, input().split())
print(sum((a*a+b*b+m)%(a*b) == 0 for a, b in combinations(range(1, n), 2))) # 1부터 n까지 숫자를 2개씩 조합
import itertools
chars = ['A', 'B', 'C']
p = itertools.permutations(chars) # chars 모든 원소로 순열을 만든다
p = itertools.permutations(chars, 2) # chars의 2개 원소로 순열을 만든다.
c = itertools.combinations(chars, 2) # chars의 2개 원소로 조합을 만든다. 조합의 경우 반드시 아이템(chars과 조합 개수(2)를 인자로 넣어줘야 한다.
print(list(p)) # [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
print(list(c)) # [('A', 'B'), ('A', 'C'), ('B', 'C')]
from itertools import permutations
n = int(input()) # 3
w = [i for i in range(1, n+1)]
res = list(permutations(w))
# [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
from itertools import combinations
n = int(input())
w = [i for i in range(1, n+1)]
res = list(combinations(w, n-1))
# [(1, 2), (1, 3), (2, 3)]
서로 다른 숫자와 문자로 이루어진 집합과 위치가 주어졌을 때 그 집합의 순열 중 주어진 위치의 순열을 구하는 프로그램을 작성하시오. (백준 9742 - 순열)
import sys
for i in sys.stdin:
a, b = i.split() # 'bein', 20
print(a, b, '=', end=' ')
f, b = 1, int(b)-1
for i in range(len(a)):
f *= i + 1 # 전체 순열의 수(4!=24) 구하기(f = 24, b = 19)
if f <= b: # b가 전체 순열 수보다 많을 경우
print('No permutation')
continue
for i in range(len(a), 0, -1):
# 문자열(abcd)을 뒤에서부터 탐색(i = 4, 3, 2, 1)
f //= i # f = 6, 2, 1, 1
print(a[b//f], end='') # a[0], a[0], a[1], a[0]
a = a[:b//f] + a[b//f+1:] # bei, ei, e
b %= f # 1, 1, 0, 0
print(f, a, b//f, b)
print()