[구현] (2-5) 정다면체 주사위

2024. 6. 11. 21:33개발의 흔적/코딩테스트

문제:  정다면체

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

<입력설명>
첫 번째 줄에는 자연수 N과 M이 주어집니다. N과 M은 4, 6, 8, 12, 20 중의 하나입니다.

<출력설명>
첫 번째 줄에 답을 출력합니다.

입력예제

 4 6

출력예제

 5 6 7

 

import sys
input = sys.stdin.readline

N, M = map(int, input().split())

max = N+M       #각 주사위의 합이 나올수있는 최대 숫자, min은 무조건 2
possible_cases = {}
for i in range(2, max+1):   # 두 수의 합이 될수있는 경우의 수 구할거얌
    # ex) i == 4
    cnt = 0
    for n in range(1, i+1): # possible (n, m): (1,3), (2,2), (3,1)
        m = i - n
        if 0<n<=N and 0<m<=M: 
        #n and m can be contained in dice N and M in respectly
            cnt += 1
    #cnt == 3 means there are 3 cases to be made
    possible_cases[i] = cnt
max_possible = 0
cases_str = ""
for case in range(2, max+1):
    possible = possible_cases[case]
    # print(case, possible)
    if possible == max_possible:
        max_possible = possible
        cases_str += f" {case}"
    if possible > max_possible:
        max_possible = possible
        cases_str = ""
        cases_str += f"{case}"
print(cases_str)