[인프런] 2-5 정다면체 (파이썬)

Jewon Joel Park·2022년 5월 28일
0

문제 출처


문제 설명

정N면체와 정M면체 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확률이 높은 숫자를 출력, 여러 개일 경우 오름차순 정렬


풀이 코드

n, m = map(int, input().split())

arr = []
result_dict = dict()

for i in range(1, n+m+1):
    result_dict.setdefault(i, 0)

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

sorted_dict = sorted(result_dict.items(), key=lambda x: x[1], reverse=True)
max_value = sorted_dict[0][1]

for k, v in result_dict.items():
    if v == max_value:
        arr.append(k)

print(*arr)

코드 설명

  1. 처리결과를 저장할 리스트 arr과, 주사위 눈의 합을 저장할 딕셔너리 result_dict 선언 및 초기화
  2. result_dict 내부의 초기 key, value 저장
  3. N+M 요소마다 for Loop을 돌며 value값 +1
  4. 카운트 최대값을 확인하기 위하여 result_dict를 value값으로 정렬, 내림차순 정렬한 뒤 최대값(max_value)에 저장
  5. result_dict을 완전탐색하며 value값이 max_value와 같을 경우 처리결과 리스트에 저장
  6. arr 리스트 언패킹하여 출력

기타사항

  • 정답을 반환할 배열 자체의 인덱스 번호를 키값으로 사용할 생각을 전혀 못했다..
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] = 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=' ')
profile
10년을 돌고 돌아 마침내 제자리를 찾은 문과 출신 Python 개발자의 인생기록장

0개의 댓글