그리디 : 큰 수의 법칙

주리·2022년 10월 13일
0

코테_그리디

목록 보기
2/10
post-thumbnail

변수

  1. N : 배열의 크기
  2. M : 숫자가 더해지는 횟수
  3. K : 젤 큰수가 더해질 수 있는 최대 수
  4. listN : 주어지는 배열
  5. first : 배열 중 가장 큰 수
    second : 배열 중 두번째로 큰 수
  6. total : 더해지는 수

로직

  1. NMK 입력받기
  2. N list 입력받기
  3. sort() 로 정렬 -> 가장큰수 두번째로큰수 찾기
  4. for M 만큼 돌면서
    K만큼 first를 + (M-1 , K-1)
    한번 second를 + (M-1)
    위 둘을 반복,,, M=0이될때까지

코드

N,M,K = map(int, input().split())
k  = K
list_data = list(map(int, input().split()))

list_data.sort()
first = list_data[-1]
second = list_data[-2]

total = 0

for data in range (0,M) :
  total += first
  k -= 1
  M -= 1

  if (M==0):
    break
  if(k==0):
    total += second
    M -=1
    k = K
    if (M==0) :
      break

print(total)

25/03/03

로직

  • 반복문 사용 X
  1. 입력값 입력받기 NMK
    배열 입력받기 sumList
  2. 배열 내림차순 정렬 (큰수부터)
    first = 젤 큰수
    second = 두번째 큰수
  3. countSec = m//k
  4. answer = second countSec + (m-countSec) first

코드

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

sumList.sort(reverse=True)
first = sumList[0]
second = sumList[1]

countSec = m // k
answer = (second * countSec) + (m - countSec) * first
print(answer)
profile
완벽한 글 보다, 그 과정들을 기록하는 개발자

0개의 댓글