-
[알고리즘] 이코테 - 큰 수의 법칙 - 2019 국가 교육기관 코테알고리즘 2022. 10. 17. 23:18728x90
1. 문제
2. 접근
- 3 4 3 4 3의 예시에서 인덱스가 다르다면 숫자가 같더라도 다르게 본다는 점에 유의하기
- 받아온 리스트를 내림차순으로 받고 index = 0과 index = 1의 값이 같은지 체크
- 같다면 가장 큰값을 m번 곱해서 결과값에 넣기
- 다르다면 k만큼 큰값을 더하고 2번째 값을 한번만 더하고 다시 큰 값을 다시 k 만큼 더함을 반복한다
3. 풀이
내 풀이
# 큰 수의 법칙 import sys input = sys.stdin.readline n, m, k = map(int, input().split()) data = list(map(int, input().split())) data = sorted(data, reverse=True) count = 0 ans = 0 # 가장 큰수가 2개일때 -> m * 큰수 if data[0] == data[1]: ans += m * data[0] # 가장 큰수가 1개일때 -> while ( k * 큰수 + 2번째 큰수 <= m ) if data[0] != data[1]: while m > 0: ans += data[0] m -= 1 count += 1 if count == k: ans += data[1] m -= 1 count = 0 print(ans)
이코테 풀이
n,m,k = map(int,input().split()) data = list(map(int,input().split())) data.sort() first = data[n-1] second = data[n-2] res = 0 while True: for i in range(k): # 가장 큰수를 k번 곱하기 if m == 0: break res += first m -= 1 if m == 0: break res += second m -= 1 print(res)
논리 자체는 같다
@@
이코테 - 더 발전된 코드
import sys input = sys.stdin.readline n, m, k = map(int, input().split()) data = list(map(int,input().split())) data.srot() first = data[n-1] second = data[n-2] # 가장 큰수가 더해지는 횟구 계산 count = int(m/(k+1)) * k count += m % (k+1) res = 0 res += (count) * first # 가장 큰 수 더하기 res += (m-count) * second # 두 번째로 큰 수 더하기 print(res)
'알고리즘' 카테고리의 다른 글
[알고리즘] 백준 1010 다리놓기 (0) 2022.10.22 [알고리즘] 이코테 - 1이 될 때까지 ( 2018 E 기업 알고리즘 대회 ) (0) 2022.10.18 [알고리즘] 프로그래머스 - 배달 (0) 2022.10.02 [알고리즘] 화성탐사 - ACM-ICPC (1) 2022.09.26 [알고리즘] 정확한 순위 - K 대회 (0) 2022.09.26