반응형

주사위 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)  # 모든 경우의 수 출력 

 

<이상>

 

반응형

+ Recent posts