본문 바로가기
프로그래밍 공부/알고리즘 공부

**5. 자료구조와 알고리즘 입문_한국정보올림피아드

by 응_비 2020. 12. 6.

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]*(개수)

댓글