ps:problems:boj:2437
저울
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 2437 |
문제명 | 저울 |
레벨 | 골드 3 |
분류 |
그리디 |
시간복잡도 | O(nlogn) |
인풋사이즈 | n<=1000 |
사용한 언어 | Python |
제출기록 | 30864KB / 68ms |
최고기록 | 52ms |
해결날짜 | 2022/01/31 |
풀이
- 재미있는 그리디 아이디어로 풀리는 문제. 알고리즘 지식이 필요없이 아이디어만 필요하기 때문에 퍼즐 문제로도 좋을 듯 하다
- 무게가 전부 정렬되어있다고 하자. a[0:i] 까지의 추를 사용해서 1부터 x까지의 무게를 모두 잴수 있다고 하다. a[i]이 x+1보다 크다면, x+1은 잴 방법이 없으므로 답은 x+1이 된다. a[i]가 x+1보다 작거나 같다면 이제 a[0:i+1]의 추를 이용하면 1부터 x+a[i] 까지의 모든 무게를 잴 수 있다. 이제 x를 x+a[i] 로 갱신하고, a[i+1]을 x+1과 비교하는 것을 반복하는 식으로 처리하면 된다.
- 시간복잡도는 정렬에 O(nlogn), 비교에 O(n). 총 O(nlogn)이다
코드
"""Solution code for "BOJ 2437. 저울".
- Problem link: https://www.acmicpc.net/problem/2437
- Solution link: http://www.teferi.net/ps/problems/boj/2437
Tags: [Greedy]
"""
def main():
N = int(input()) # pylint: disable=unused-variable
weights = [int(x) for x in input().split()]
weights.sort()
max_measurable_weight = 0
for w in sorted(weights):
if w > max_measurable_weight + 1:
break
max_measurable_weight += w
print(max_measurable_weight + 1)
if __name__ == '__main__':
main()
ps/problems/boj/2437.txt · 마지막으로 수정됨: 2022/02/02 05:28 저자 teferi
토론