coding test - python/기본기 문제

문제 / 정다면체 / Python

sillon 2022. 3. 31. 02:24
728x90
반응형

 

문제 제목: 정다면체

 

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

 

▣ 입력설명

 

첫 번째 줄에는 자연수 N과 M이 주어집니다.

N과 M은 4, 6, 8, 12, 20 중의 하나입니다.

 

▣ 출력설명

 

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

 

▣ 입력예제

4 6

 

▣ 출력예제 

5 6 7

 


나의 풀이 1

 

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

cnt=[]

for i in range(N+M+1): #가장 큰 눈 끼리 더했을 때의 수만큼 리스트를 늘려줌
    cnt.append(0) 

for i in range(1,M+1):
    for j in range(1,N+1):
        cnt[i+j] += 1 #각 눈의 합이 나온 수 만큼 더해줌

print(cnt.index(max(cnt))) #가장 많이 나온 합을 출력

첫번째 풀이는 오토 채점 결과 20점이 나왔다...

왜 그런지 cnt 리스트만 출력해보았는데

문제 조건을 간과한 사실이 하나있었다. 

높은 확률로 나올 수가 여러개면 그 여러개 다 출력해야하는데 나는 하나만 출력한 것이었다 

 

 

모범답안

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

cnt=[0] *(n+m+3) #인덱스 넉넉하게 하려고 3 더한것
max = 0 


for i in range(1,M+1):
    for j in range(1,N+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='')

앞서 문제에서 공부한 최솟값 알고리즘과 비슷하게 

최댓값으로 적용한 뒤, 높은 확률로 나올 수를 출력하면 된다!

 

end = ''를 이용해서 옆으로 나란히 출력하는 문제의 조건을 맞춰주었다. 


※ 알아야 할 것

- 최솟값 알고리즘 이용!

- end = ''를 이용해서 나란히 출력

 

728x90
반응형