본문 바로가기

Algorithm

BOJ 2217 로프 (python)

반응형

BOJ 2217 로프

silver4

문제

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

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

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

입력

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

출력

첫째 줄에 답을 출력한다.

풀이

N = int(input())
ropes = [int(input()) for _ in range(N)]

# 전반적인 원리
# 로브들이 모두 동일한 힘을 감당 할 수 있으므로 제일작은 로프부터검사
# 그다음 로프를 검사할 때는 이전에 검사했던 작은 로프는 제외시키므로 갯수 1감소

# 로프 정렬
ropes.sort()

# 나올수 있는 총 케이스 초기값
cases = []

# 로프의 개수만큼 반복하여 검사
for i in range(len(ropes)):
    # 가장 작은 로프부터 검사하며 갯수는 하나씩 감소
    cases.append(ropes[i] * (len(ropes) - i))

# 그중 제일 큰 값이 결과값
result = max(cases)

print(result)
  • 쉬운 문제였지만 함정이 있었다.
    • 맨처음에는 단순히 가장 작은 로프와 총 개수를 곱했지만 잘생각해보니 아니었다.
반응형

'Algorithm' 카테고리의 다른 글

SWEA 5207 이진탐색 (python)  (0) 2021.04.21
SWEA 4839 이진탐색 (python)  (0) 2021.04.21
BOJ 9020 골드바흐의 추측 (python)  (0) 2021.04.20
SWEA 11454 Baby-gin Game (python)  (0) 2021.04.20
SWEA 5203 베이비진 게임 (python)  (0) 2021.04.20