[Python] 백준알고리즘 #2217

r1verfuture·2022년 1월 27일
0

백준알고리즘

목록 보기
103/110

📝 문제

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.
하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.
각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.

⌨️ 입력

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

🖨 출력

첫째 줄에 답을 출력한다.

⌨️ 예제 입력

2
10
15

🖨 예제 출력

20

📚 내가 제출한 코드

import sys
n = int(sys.stdin.readline())
rope = []
for _ in range(n):
    rope.append(int(sys.stdin.readline()))
rope.sort(reverse = True)
maxW = rope[0]
for i in range(n):
    temp = rope[i] * (i + 1)
    if temp > maxW:
        maxW = temp
print(maxW)

✏️ 내가 제출한 코드에 대한 설명

  • sys.stdin.readline() : 키보드로 입력한 값을 받는 함수 (기존의 input() 보다 속도가 훨씬 빠르다.)
  • range(a) : 0부터 a-1까지의 정수를 반환하는 함수
  • a.sort(reverse = True) : a를 내림차순으로 정렬하는 함수 (≠ sorted(a, reverse = True))
  • 메모리 : 34080 KB
  • 시간 : 148 ms
  • 코드 길이 : 253 B

📎 참고

  • 문제에서 '최대'라는 단어가 나오면 배열을 내림차순으로 정리해둔 후에 구현하는 것이 좋다.
profile
#iOS #Swift #Developer #Python

0개의 댓글