프로그래밍/문제풀이
[이것이 코딩테스트다] 큰 수의 법칙
Cycrypt0
2023. 3. 29. 22:52
728x90
풀이시간 30m / 메모리 제한 128MB / 기출 2019 국가 교육기관 코딩테스트
입력조건
- 첫째 줄에 N(2 <= N <= 1000), M( 1 <= M <= 10,000), K(1 <= K <= 10,000)의 자연수가 주어지며, 각 자연수는 공백으로 구분한다.
- 둘째 줄에 N개의 자연수가 주어진다. 각 자연수는 공백으로 구분한다. 단, 각각의 자연수는 1 이상 10,000이하의 수로 주어진다.
- 입력으로 주어지는 K는 항상 M보다 작거나 같다.
inputs = lambda x : map(int, x.split())
N, M, K = inputs(input())
repeat = M // K, M % K
lst = list(inputs(input()))
lst.sort()
lst = lst[-2:]
result = (lst[1] * repeat[0] * K) + lst[0] * repeat[1]
print(result)
풀이에 걸린 시간 : 15 min
리뷰
책에서는 2가지의 방법을 제시했다. 반복문을 이용하는 방법과 수학적 방법.
풀이 아이디어를 생각하다보니 마지막 2가지만 생각하면 되겠다 라는 결론이 났고, 그러면 굳이 반복문을 쓰지 않아도 되지 않을까라는 생각으로 풀이하였다.
코드의 가독성을 위해 inputs라는 변수를 람다 함수로 만들어 반복되는 부분을 줄여주었고, lst를 큰 수 2개만 남기도록 정렬한 후 result 변수에서 계산하였다.
이와 같은 방법은 입력값이 커졌을때에도 사용 가능하다는 장점이 있다.
728x90