사용자 도구

사이트 도구


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()

토론

댓글을 입력하세요:
X​ S O S M
 
ps/problems/boj/2437.txt · 마지막으로 수정됨: 2022/02/02 05:28 저자 teferi