주사위 N번 던질 때 모든 조합과 경우의 수 출력
글. 오상문 sualchi@daum.net
던질 때마다 1~6 여섯 가지가 가능하므로 계속 N번만큼 6을 곱한 값이 모든 경우의 수입니다.
즉 던질 횟수 N이 4인 경우에는 6**4 (6의 4거듭제곱)을 계산한 1296이 답입니다.
조합은 매번 같은 숫자가 겹칠 수 있으므로 N이 4인 경우에는 이런 조합이 가능합니다.
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 1 5
1 1 1 6
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 2 5
1 1 2 6
1 1 3 1
...
6 6 5 1
6 6 5 2
6 6 5 3
6 6 5 4
6 6 5 5
6 6 5 6
6 6 6 1
6 6 6 2
6 6 6 3
6 6 6 4
6 6 6 5
6 6 6 6
이 문제는 for 문으로 해결하기 아려우므로 재귀 호출을 이용하여 해결하겠습니다.
재귀함수는 N번 만큼 호출되는 구조로 만듭니다.
만약 조합이 하나 완성되면 출력하고 돌아갑니다.
아닌 경우에는 for 문으로 1~6까지 재귀호출을 하되 조합 값을 추가하고 depth를 이용하여 카운트를 증가합니다.
이렇게 작성한 코드는 다음과 같습니다.
N = int(input()) # 주사위 횟수 입력
combi = [0]*(N+1) # 하나의 조합 저장 배열 (0번 인덱스는 사용 안함)
def dfs(depth):
if depth > N: # 한 조합 생성 완료
print(*combi[1:]) # 0번 제외하고 출력하고 돌아감
return
for i in range(1, 7): # 1~6 (주사위 눈) 재귀 호출
combi[depth] = i # 호출전, 조합 배열에 값 추가
dfs(depth+1) # 재귀 호출
#-----------------------------------
dfs(1) # 함수 호출하여 조합 출려
print("모든 경우의 수:", 6**N) # 모든 경우의 수 출력
<이상>
'Python 기초' 카테고리의 다른 글
파이썬, print 출력 옵션 활용하기 (0) | 2020.10.12 |
---|---|
파이썬, 3항 조건연산자 흉내내기 (0) | 2020.10.04 |
파이썬, 리스트 언팩(unpack, 데이터 분리) 처리 (0) | 2020.09.19 |
파이썬, 피보나치 수열 n개 출력, n번째 값 반환 함수 (0) | 2020.09.18 |
파이썬, 우선순위 큐 사용하기 PriorityQueue (0) | 2020.08.23 |