큰 수의 법칙
입력 조건
- 첫째 줄에 N(2 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000)의 자연수가 주어지며, 각 자연수는 공백으로 구분된다.
- 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분된다. 단, 각각의 자연수는 1 이상 10,000 이하의 수로 주어진다.
- 입력으로 주어지는 K는 항상 M보다 작거나 같다.
출력 조건
- 첫째 줄에 동빈이의 큰 수의 법칙에 따라 더해진 답을 출력한다.
입력 예시
5 8 3
2 4 5 4 6
출력 예시
46
코드
(단순하게 푸는 답안 예시)
n,m,k = map(int,input().split())
data = list(map(int, input().split()))
data.sort()
first = data[n-1]
second = data[n-2]
result = 0
while True
for i in range(k) # 가장 큰 수를 k번 더하기
if m == 0 # m이 0이라면 반복문 탈출
break
result += first
m -= 1 # 더할때마다 1씩 빼기
if m == 0 # m이 0이라면 반복문 탈출
break
result += second # 두번째로 큰 수 더하기
m -= 1 # 더할 때마다 1씩 빼기
print(result) # 최종 답안 출력
코드
(완성된 코드)
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 += (m - count) * second # 두 번째로 큰 수 더하기
print(result) # 최종 답안 출력
코드 풀이
반복되는 수열의 길이 (K + 1)
M을 (K + 1)로 나눈 몫이 수열이 반복되는 횟수가 된다.
다시 K를 곱해주면 가장 큰 수가 등장하는 횟수가 된다.
이때 M이 (K + 1)로 나누어떨어지지 않는 경우도 고려해야하기 때문에
M을 (K + 1)로 나눈 나머지 만큼 가장 큰 수가 추가로 더해지므로 이를 고려해줘야한다.
즉, 가장 큰 수가 더해지는 횟수는 다음과 같다.
int (M / (K + 1 )) * K + M % (K + 1)
728x90
반응형
'코테 문제 풀기' 카테고리의 다른 글
[프로그래머스] 정수 제곱근 판별 (파이썬/ python) (0) | 2024.04.03 |
---|---|
[프로그래머스] 문자열 내 p와 y의 개수 (파이썬/python) (0) | 2024.04.03 |
백준 25305.파이썬(python) - 커트라인 (0) | 2023.09.19 |
백준 2587. 파이썬(python) - 대표값2 (0) | 2023.09.18 |
백준 2675번 문자열 반복 (with. 파이썬) (0) | 2023.04.03 |