5. 정다면체
두 개의 정 N면체와 정 M면체의 두 개의 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확
률이 높은 숫자를 출력하는 프로그램을 작성하세요.
정답이 여러 개일 경우 오름차순으로 출력합니다.
▣ 입력설명
첫 번째 줄에는 자연수 N과 M이 주어집니다. N과 M은 4, 6, 8, 12, 20 중의 하나입니다.
▣ 출력설명
첫 번째 줄에 답을 출력합니다.
▣ 입력예제 1
4 6
▣ 출력예제 1
5 6 7
피드백
1.
주사위는 1부터 N까지. 리스트의 인덱스는 0부터 N-1까지 이므로 N + 1
2.
list 생성 방식
cnt_list = [0] * (N+M+1)
또는
list = [0 for i in range(n)]
- 원소가 여러개 있는 리스트 초기화 하는 방법 lst=[0]*(개수)
3.
print("내용", end = ' ')
end에 들어가는 값으로 default인 \n을 바꿈
import sys
N, M = map(int, input().split()) #N, M을 리스트함.
# 즉 print(N, M)
cnt_list = [0] * (N+M+1) * 초기화 하는 방법
for i in range(1, N+1):
for j in range(1, M+1):
cnt_list[i+j] += 1
# 리스트의 인덱스를 주사위 눈으로, 해당 인덱스에 들어가는 값이 빈도 수를 나타냄.
# print(cnt_list)
maximum = 0
for i in range(N+M+1):
if cnt_list[i] > maximum: # 최댓값 알고리즘 적용
maximum = cnt_list[i]
for i in range((N+M+1):
if cnt_list[i] == maximum: # (= 최댓값)으로 바로 제시
print(i, end=' ')
반성점
어떤식으로 사고해야할지 감이 안잡혔다. 어려웠다.
음, 오름차순에 출력에 있어서 Max로 접근할 수 있음도 알아둘 것.
n, m=map(int, input().split())
cnt=[0]*(n+m+3) *list 초기화 하는 방법
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=' ')
배운 것
- 원소가 여러개 있는 리스트 초기화 하는 방법 lst=[0]*(개수)
'프로그래밍 공부 > 알고리즘 공부' 카테고리의 다른 글
* 4. 자료구조와 알고리즘 입문_한국정보올림피아드 (0) | 2020.12.06 |
---|---|
** 7. 자료구조와 알고리즘 입문_한국정보올림피아드 (1) | 2020.12.06 |
*6. 한국정보올림피아드 알고리즘 연습_자릿수의 합 (0) | 2020.12.05 |
계산기 연습 () 넣기 (0) | 2020.11.25 |
sort 문제풀이 (0) | 2020.11.09 |
댓글