코딩테스트[파이썬]/알고리즘 문제풀이 입문

[구현력 기르기] - 정다면체

softmoca__ 2024. 2. 4. 22:43
목차

정다면체

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

 

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

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

 

입력예제 1

4 6

출력예제 1

5 6 7

 

 

 

나의 코드

n,m=map(int,input().split())
arr=[0]*(n+m+1)

for i in range(1,n+1):
    for j in range(1,m+1):
        arr[i+j]+=1
M=max(arr)
res=[]

for i in range(2,n+m+1):
    if arr[i]==M:
        res.append(i)

print(res)

두 주사위의 합으로 가능한 범위는 2~ 각 눈의 수의 합 이다.

우선 각 눈의 합을 인덱스로 가지는arr리스트를 생성하고

2중 반복문으로 해당 눈의 합이 나올때마다 arr의 해당 인덱스에 1을 더한다.

그리고 반복문을 돌며 arr중 최대값과 같은 값을 가진 인덱스를 res 리스트에 저장한다.

그후 res를 출력 !!

 

import sys
sys.stdin=open("input.txt", "r")
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=' ')

나의 코드와 전체적으로 비슷하다
단지 res리스트 없이 바로 출력을 진행했다~