알고리즘

[알고리즘] 정다면체

오승미 2022. 1. 19. 22:53

📌

두 개의 정 N면체와 정 M면체의 두 개의 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확 률이 높은 숫자를 출력하는 프로그램을 작성하세요. 정답이 여러 개일 경우 오름차순으로 출력합니다.

 

ex) n=5, m=4

 

1 2 3 4 5

                                                                   1  2 3 4 5 6

                                                                   2  3 4 ...

                                                                   3

                                                                   4

 

 

✔ 내가 짠 코드

import sys
sys.stdin=open('input.txt', "r")

n, m=map(int, input().split())
#n+m은 만들어질 수 있는 최댓값이기 때문에 배열 index를 n+m만큼 할당한다.
cnt=[0] * (n+m)
hap, max=0, 0

for i in range(1, n+1):
    for j in range(1, m+1):
        hap=i+j
        #해당하는 index의 값을 1 더한다.
        cnt[hap-1] += 1

#가장 많은 확률의 수를 구한다.
for i in range(0, n+m):
    if max < cnt[i]:
        max=cnt[i]

for i in range(0, n+m):
    if max == cnt[i]:
        print(i+1, end=' ')

 

✔ 실제 코드

n, m=map(int, input().split())
cnt=[0]*(n+m+3)
max=0

for i in range(1, n+1):
    for j in range(1, m+1):
        cnt[i+j]+=1

for i in range(n+m+1):
    if cnt[i] > max:
        max=cnt[i]

for i in range(n+m+1):
    if cnt[i]==max:
        print(i, end='')

 

>>>

 

실제 코드에선 배열 크기를 n+m보다 3 크게 만들어 여유롭게 해주었다.

따라서 2,3 번째 반복문 범위가 다르다.

hap이라는 변수를 굳이 둘 필요가 없었으니 지워도 될 것 같다.