본문 바로가기

카테고리 없음

[python3]큰 수의 법칙

728x90

문제

철수의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다.
단, 배열의 특정 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다.

예를 들어 순서대로 2,4,5,4,6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자.
이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6+6+6+5+6+6+6+5 인 46이 된다.

단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. 예를 들어 순서대로 3,4,3,4,3으로 이루어진 배열이 있을 때 M이 7이고, K가 2라고 가정하자. 이 경우 두 번째 원소에 해당하는 4와 네 번째 원소에 해당하는 4를 번갈아 두 번씩 더하는 것이 가능하다. 결과적으로 4+4+4+4+4+4+4 인 28이 도출된다.

배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 철수의 큰 수의 법칙에 따른 결과를 출력하시오.

입력 조건

  • 첫째 줄에 N(2 ≤ N ≤ 1,000), M(1≤M≤10,000), K(1≤K≤10,000)의 자연수가 주어지며, 각 자연수는 공백으로 구분한다.
  • 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다. 단, 각각의 자연수는 1 이상 10,000 이하의 수로 주어진다.
  • 입력으로 주어지는 K는 항상 M보다 작거나 같다.

출력 조건

  • 첫째 줄에 철수의 큰 수의 법칙에 따라 더해진 답을 출력한다.

 

문제풀이

 

입력값 중에서 가장 큰수와 두번쨰로 큰수를 저장한다.

 

연속으로 더할수 있는 횟수는 k번이므로 가장 큰수를 k번 더하고 두번쨰로큰수를 한번 더하는 연산을 반복한다.

 

n,m,k=map(int,input().split())


array=list(map(int,input().split()))
    
array.sort()
array_max=array[n-1]
array_max2=array[n-2]
result=0
while(1):
    
    for i in range(k):
        if m==0:
            break
        result+=array[n-1]
        m-=1
    
    if m==0:
        break

    result+=array[n-2]
    m-=1
    
print(result)
728x90