알고리즘/인프런: 파이썬 알고리즘 문제풀이
구현 문제 #5. 정다면체
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 으로 설정한다.