728x90
반응형
# 오늘의 문제
이것이 코딩 테스트다. 챕터3-2 92page 큰 수의 법칙
# 나의 코드
conditionList = list(map(int, input().split()))
numList = list(map(int, input().split()))
numList.sort(reverse = True)
num1 = numList.pop(0)
num2 = numList.pop(0)
total = 0
x = conditionList[1] % conditionList[2]
temp = num1
k = 0
for i in range(0,conditionList[1]):
if( num1 != num2):
if( i % conditionList[2] == x):
total = total + num2
else:
total = total + num1
else:
total = total + temp
if( i % conditionList[2] == x):
if( temp == num1):
temp = num2
else:
temp = num1
print(total)
# 정답과의 비교
1. 내 코드는 첫번째 큰 수와 두번째 큰 수 값이 같은경우와 다른경우 두가지를 분기를 주었다
하지만 첫번째 큰 수를 연속덧셈이 가능한 K번 까지 더하고 두번째 큰 수를 한번만 더하면 결과적으로 같은 코드가 되는데 그부분을 놓쳤다.
2. 연속 덧셈이 가능한 큰수 K번에 + 1번의 두번째 큰 수는 k+1가 배열로 더하는수 M까지 루프를 도는 수열이니
M/K+1 을 하면 총 도는 수열의 횟수 거기에 K를 곱하면 M번중 K번의 등장횟수가 되고 M이 k+1로 나누어 지지 않는 경우도 있기 때문에 (M/K+1)*k + ( M%K+1 ) 가 가장 큰 수가 등장하는 횟수가 된다. 이를 가지고 정답인 코드를 짜게되면
n,m,k = map(int, input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n-1]
second = data[n-2]
count = int(m/ (k+1)) * k
count += m % ( k +1 )
result = 0
result += count * first
result += (count -m) * second
print(result)
728x90
'프로그래밍 회고록 > Python' 카테고리의 다른 글
2021.10.25 코테_왕실의 나이트 (0) | 2021.10.26 |
---|---|
2021.10.25 코테_시각 (0) | 2021.10.25 |
2021.10.24 코테_상하좌우 (0) | 2021.10.24 |
2021.10.21 코테_1이 될 때까지 (0) | 2021.10.22 |
2021.10.21 코테_숫자 카드 게임 (0) | 2021.10.21 |