Lined Notebook

[Silver 4] [Java] 로프 (2217번)

by HeshAlgo

<로프>

문제 설명

N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.

하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.

각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 단, 각각의 로프는 한 개씩만 존재한다.

 

제한 사항

입력

첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 정수이다.

출력

첫째 줄에 답을 출력한다.

내 생각

문제를 이해하는데 시간을 잡아 먹은 것 같다. 문제만 이해할 수 있으면 로직은 금방 짤 수 있었습니다. 

주어진 로프의 중량을 오름차순이든 내림차순이든 원하는 방법을 선택합니다. 저같은 경우는 내림차순 보다 오름차순이 편해서 오름차순으로 해결했습니다. 오름차순일 경우, 각 중량 인덱스 순서대로 로프개수를 하나씩 줄여주면서 곱해주면 됩니다. 

예를 들어 로프 중량이 [12, 20, 30, 33, 35]일 경우,

12*5 = 60

20*4 = 80

30*3 = 90

33*2 = 66

35*1 = 35

이렇게 되므로 최대 중량은 90이 될 것입니다. 말을 잘하는 편이 아니라..예를 보시면 편하실 겁니다ㅎㅎ...

 

푼 시간

15분 20초

 

작성 코드

실행 결과

블로그의 정보

꾸준히 공부하는 개발 노트

HeshAlgo

활동하기