백준 9094 - 수학적 호기심

2020-12-23

순열과 조합.

itertools 모듈의 permutationscombinations 함수를 이용해 순열과 조합 구하기.

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()

문제 보기