-
68 - (파이썬) 확인문제: 기본 형태study with Q - 파이썬 2024. 7. 29. 22:31
# 여러 개의 테이블에 나누어 앉을 때, 한 사람만 앉는 테이블이 없도록 그룹을 지어보자. (단, 인원 수를 나누는 패턴만 구한다.)
eg) 6명일 때, 다음 네 가지 경우를 갖는다.
2명+2명+2명 2명+4명 3명+3명 6명 #한 테이블에 앉을 수 있는 최대 인원은 10명일 때,
- step 1) 화살표 만들기
전체사람수 = 6 #그래프를 나타내는 함수에 노드에 적힌 수를 매개변수로 지정한다 def graph(nod): #화살표를 2명부터 6명까지 뽑아주기 위해 for 반복문을 이용한다 #한 테이블에 앉을 수 있는 최대 인원은 10명이므로 nod와 10명 중 작은 것을 골라서 돌리게 한다 for i in range(2, min(nod, 10)+1): print(i) graph(전체사람수) >>> 2 3 4 5 6
- step 2) {nod}와 {i} 화살표를 만드는 것을 확인하는 단계를 추가
전체사람수 = 6 #그래프를 나타내는 함수에 노드에 적힌 수를 매개변수로 지정한다 def graph(nod): print(f"{nod}에 진입") #화살표를 2명부터 6명까지 뽑아주기 위해 for 반복문을 이용한다 #한 테이블에 앉을 수 있는 최대 인원은 10명이므로 nod와 10명 중 작은 것을 골라서 돌리게 한다 for i in range(2, min(nod, 10)+1): print(f"{i} 화살표를 만듦") #재귀함수로 호출하게되면 graph(nod-i) print() graph(전체사람수) >>> 6에 진입 2 화살표를 만듦 4에 진입 2 화살표를 만듦 2에 진입 2 화살표를 만듦 0에 진입 3 화살표를 만듦 1에 진입 4 화살표를 만듦 0에 진입 3 화살표를 만듦 3에 진입 2 화살표를 만듦 1에 진입 3 화살표를 만듦 0에 진입 4 화살표를 만듦 2에 진입 2 화살표를 만듦 0에 진입 5 화살표를 만듦 1에 진입 6 화살표를 만듦 0에 진입
요고를 이해하기 위해 파이썬 튜터에 돌려보면
- step 3) counter로 모든 경우의 수 구하기
전체사람수 = 6 counter = 0 def graph(nod): #print(f"{nod}에 진입") #nod가 0명이 되는 경우만 세어준다 if nod == 0: #외부에서 스택을 변경하가 때문에 global을 쓴다 global counter counter += 1 for i in range(2, min(nod, 10)+1): #print(f"{i} 화살표를 만듦") graph(nod-i) graph(전체사람수) print(counter) >>> 5
⚠︎ 아 근디, 중복을 세어서 5개나 나왔네
- step 4) 중복을 삭제한다
전체사람수 = 6 counter = 0 #이전에 몇 명을 앉혔는지 이전 화살표에 적힌 숫자를 만들어주고 def graph(nod,preArrowNumber): if nod == 0: global counter counter += 1 #2와 이전 화살표에 적힌 숫자 중 큰 것을 선택하는 조건을 만들어준다 for i in range(max(2,preArrowNumber), min(nod, 10)+1): #매개변수는 i를 전달해서 말해준다 graph(nod-i, i) #이전 화살표의 항등원은 0 graph(전체사람수,0) print(counter) >>> 4
#따라서 100명의 사람이 하나 이상의 테이블에 나누어 앉는 패턴의 경우의 수를 구하면
전체사람수 = 100 counter = 0 #이전에 몇 명을 앉혔는지 이전 화살표에 적힌 숫자를 만들어주고 def graph(nod,preArrowNumber): if nod == 0: global counter counter += 1 #2와 이전 화살표에 적힌 숫자 중 큰 것을 선택하는 조건을 만들어준다 for i in range(max(2,preArrowNumber), min(nod, 10)+1): #매개변수는 i를 전달해서 말해준다 graph(nod-i, i) #이전 화살표의 항등원은 0 graph(전체사람수,0) print(counter) >>> 437420
'study with Q - 파이썬' 카테고리의 다른 글
70 - (파이썬) 하노이탑 (0) 2024.08.01 69 - (파이썬) 확인문제, 메모화 추가 (0) 2024.08.01 67 - (파이썬) 가독성과 유지보수성 (0) 2024.07.15 66 - (파이썬) 이터러블, 이터레이터, 제너레이터 함수, 제너레이터 표현식 (0) 2024.07.09 65 - (파이썬) CSV 파일 읽고 쓰기 (1) 2024.07.08