백준(알고리즘)

[이것이 코딩 테스트다 with 파이썬] 큰 수의 법칙

빡상이 2021. 6. 21. 15:23

문제 

여기서 큰 수의 법칙이란 다양한 수로 이뤄진 배열이 있을 때 주어진 수들을 M번 더해 가장 큰 수를 만드는 법칙

단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과할 수는 없음

 

입력 조건

첫째 줄에 N(2<=N<=1000), M(1<=M<=10000), K(1<=K<=10000)의 자연수가 주어지며 각 자연수는 공백으로 구분

둘째줄에 N개의 자연수가 주어짐. 각 자연수는 공백으로 구분. 단, 각각의 자연수는 1이상 10000이하의 수로 주어짐

입력으로 주어지는 K는 항상 M보다 작거나 같다.

 

출력 조건

첫째 줄에 큰 수의 법칙에 따라 더해진 답을 출력

 

입력 예시

5 8 3

2 4 5 4 6 

 

출력 예시

46 

 

※이때 큰 수인 6을 k번 더하고 다음 수 5를 한번 더하면 다시 6을 k번 더할 수 있다

 

풀이:

1. sort함수를 사용하여 입력받은 배열을 내림차순 정렬

2.몇번째 더하는지 확인할 정수형 변수를 두개를 만들어 if문을 통해 적절히 break문과 continue로 이어간다

 

SORT 함수 (정렬)

  • .sort() 를 사용하면 오름차순 자동 정렬
  • .sort(reverse=True) 를 사용하면 내림차순 정렬

map함수 입력받기

  •  
  • arr = list(map(int, input().split())) //배열arr에 공백을 기준으로 입력받기
  • a, b, c = map(int, input().split())
    //변수 a,b,c에 각각 공백을 기준으로 정수 입력받기
n,m,k= map(int,input().split())

arr=list(map(int,input().split()))
arr.sort(reverse=True)
print(arr)
sum=0
rcount=0 //전체 몇번 반복중인지 확인하는 rcount
scount=0 //하나의 정수가 몇번 반복중인지 확인하는 scount
while(rcount!=m):
    if (scount == k):
        sum+=arr[1]
        rcount+=1
        scount=0
        continue

    rcount+=1
    sum+=arr[0]
    scount+=1


print(sum)

6+6+6+5+6+6+6+5

 

반응형