ps:problems:boj:2217
로프
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 2217 |
문제명 | 로프 |
레벨 | 실버 4 |
분류 |
그리디 |
시간복잡도 | O(nlogn) |
인풋사이즈 | n<=100,000 |
사용한 언어 | Python |
제출기록 | 33052KB / 132ms |
최고기록 | 92ms |
해결날짜 | 2021/12/30 |
풀이
- k개의 로프를 썼을때 각각의 로프에 걸리는 중량은 동일하다. 그말은 k개의 로프를 쓸 경우에는 가장 강한 로프 k개를 쓰는것이 최적이라는 뜻이고, 이때 들수 있는 중량은 k번째로 강한 로프에 의해서 결정되다는 뜻이다.
- 따라서, 전체에서 i번째로 강한 로프가 i개 있을때 들수 있는 중량 W[i]를 모든 i에 대해서 계산한 다음에 max(W)를 구하면 끝이다. i번째로 강한 로프를 바로 찾는 것은, 그냥 로프들을 정렬한 다음에 순회하면 된다. 그럼면 정렬에 O(nlogn), 나머지에 O(n)이 걸리므로 총 시간복잡도는 O(nlogn)
코드
"""Solution code for "BOJ 2217. 로프".
- Problem link: https://www.acmicpc.net/problem/2217
- Solution link: http://www.teferi.net/ps/problems/boj/2217
"""
import sys
def main():
N = int(sys.stdin.readline())
ropes = [int(sys.stdin.readline()) for _ in range(N)]
ropes.sort(reverse=True)
print(max(rope * i for i, rope in enumerate(ropes, start=1)))
if __name__ == '__main__':
main()
ps/problems/boj/2217.txt · 마지막으로 수정됨: 2021/12/31 17:24 저자 teferi
토론