EPI00 개발일지
파이썬 순열, 조합, 중복순열, 중복조합 +파스칼의 삼각형 계산하는 코드 본문
순열, 조합, 중복순열, 중복조합을 계산하는 공식이다.
사실 저게 각각 뭘 의미했는지는 이미 다 까먹었지만, 아무튼 저 공식대로 계산하면 그 값을 구할 수 있다.
그래서 이걸 파이썬으로 구현할건데, 각각 함수로써 구현을 할 것이다. 단, 중복조합은 조합을 이용해 계산하고, 조합은 순열을 이용해 계산하는 방식으로 할 것인데, 순열의 계산 과정에서 팩토리얼이 필요하니....팩토리얼도 따로 함수로 구현하는 것이 편할 것이다.
그래서 완성한 함수들이다 :
def fac(n):#팩토리얼
r = 1
for i in range(n):
r *= (i+1)
return r
def P(n,r):#nPr
return fac(n)/fac(n-r)
def C(n,r):#nCr
return P(n,r)/fac(r)
def Pi(n,r):#nΠr
return n**r
def H(n,r):#nHr
return C(n+r-1,r)
아무튼 완성을 했고, 여기서 조합을 이용해 파스칼의 삼각형을 출력하는 함수도 살짝 만들어보았다.
def pascal(n):
i = 0
while i<=n:
r = ''
j = 0
while j<=i:
r+=str(int(C(i,j)))+' '
j+=1
i+=1
print(r)
return
사실 옛날에 codeup등에서 문제를 풀 땐 C++을 사용했었기 때문에 파이썬식 for문에 적응하지 못하고 while문으로 C언어식 for문을 사용하는 모습이다....
아무튼 이걸 적당히 다듬어서 전체 코드를 한번 만들어보면....
def fac(n):#팩토리얼
r = 1
for i in range(n):
r *= (i+1)
return r
def P(n,r):#nPr
return fac(n)/fac(n-r)
def C(n,r):#nCr
return P(n,r)/fac(r)
def Pi(n,r):#nΠr
return n**r
def H(n,r):#nHr
return C(n+r-1,r)
def pascal(n):
i = 0
while i<=n:
r = ''
j = 0
while j<=i:
r+=str(int(C(i,j)))+' '
j+=1
i+=1
print(r)
return
def main():
a = int(input("1, 2번 중 선택 : "))
if a==1:
asdf()
else:
qwer()
def asdf():
a = int(input("1:순열 2:조합 3:중복순열 4:중복조합 선택 : "))
s = input("n과 r의 값을 띄어쓰기를 사이에 두고 입력 : ").split(' ')
n,r = int(s[0]),int(s[1])
if a==1:
print(str(n)+'P'+str(r)+' = '+str(P(n,r)))
elif a==2:
print(str(n)+'C'+str(r)+' = '+str(C(n,r)))
elif a==3:
print(str(n)+'Π'+str(r)+' = '+str(Pi(n,r)))
else:
print(str(n)+'H'+str(r)+' = '+str(H(n,r)))
return
def qwer():
a = int(input("파스칼의 삼각형 몇번째 줄 까지? "))
pascal(a)
return
if __name__=='__main__':
main()
이런 코드가 완성이 된다.
사실 글 적기 귀찮다...
'프로그램 개발?' 카테고리의 다른 글
RICK (0) | 2022.03.15 |
---|---|
숫자야구 (0) | 2021.09.22 |
삼각함수+다항함수 정적분 (파이썬, 코드 only) (1) | 2021.07.25 |
다항함수 정적분 프로그램 (C++, 코드 only) (0) | 2021.07.14 |
(코딩 교육용)C언어 순서맞추기 문제내는 프로그램 (0) | 2021.06.16 |