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
'coding test - python > 기본기 문제' 카테고리의 다른 글
문제 / 자릿수의 합 / Python (0) | 2022.03.31 |
---|---|
문제 / 소수 개수 출력하기 (에라토스테네스 체) / Python (0) | 2022.03.31 |
문제 / 대푯값 / Python (0) | 2022.03.31 |
문제 / K번째 큰 수 / Python (0) | 2022.03.30 |
문제 / K번째 수 / Python (0) | 2022.03.30 |