bearbrick 2022. 5. 15. 03:09

*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.

 

 

 

내 풀이

 

1. 두 개의 주사위 눈의 합 모두 구하기

2. 최소 눈의 합 2부터 가장 큰 눈의 합까지 각 빈도수 구하기

3. 최대 빈도 수를 가진 눈의 합 구하기 (조건문을 통해 최대 빈도수를 갱신하면서 res[ ]배열도 갱신)

 

import sys
#sys.stdin=open("input.txt","rt")

n, m = map(int, input().split())
sum=[]

for i in range(1,n+1):
    for j in range(1, m+1):
        sum.append(i+j)

maxSum = max(sum)
maxFreq=0
res=[0]

for i in range(2, maxSum+1):
    cnt = sum.count(i)
    if cnt > maxFreq:
        maxFreq = cnt
        res.pop()
        res.append(i)
    elif cnt == maxFreq:
        res.append(i)

for x in res:
    print(x, end=' ')

 

 

 

 

강사님 풀이

 

import sys
sys.stdin=open("input.txt", "r")
n,m=map(int, input().split())

cnt=[0]*(n+m+3) # 눈의 합의 빈도 수를 저장하는 배열 생성
                # 인덱스 = 눈의 합, 값 = 빈도 수
max=-2147000000 # 대략 정수의 가장 작은 값

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=' ')

 

 

 

 

배운 점

 

1. 1차원 배열의 인덱스를 의미있는 값으로 사용할 수 있다

2. 손쉽게 구할 수 있는 값은 내장함수를 이용하지 않고 직접 구한다.

3. 최대값을 초기화할 때는 대략 정수의 가장 작은 값인 -2147000000 으로 설정한다.