2021. 9. 1. 00:42ㆍProgramming/Python
문제
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.
하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.
각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다.
입력
첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 자연수이다.
출력
첫째 줄에 답을 출력한다.
아이디어
각 로프의 최대 중량을 구해 리스트를 짜면 되지 않을까? 로 접근해봤다.
1. 예를 들어, 10kg 20kg 30kg의 로프 3개가 있을 때, 3개 로프를 골고루 쓰게 된다면 10kg * 3 으로 최대 중량은 30kg가 된다. 10kg짜리 로프에는 10kg이상의 하중이 가해지면 안되기 때문이다.
2. 똑같은 방식으로 만약 20kg 로프와 30kg 로프 2개만 쓴다면, 20kg * 2 로 최대 중량은 40kg가 된다.
3. 마찬가지로 30kg 로프 1개만 쓴다면, 최대 중량은 30kg이다.
이렇게 해서 구한 최대 중량들을 리스트화하여 가장 큰 값을 도출하면 된다.
코드
주요 코드 복습
1. 나는 로프 정보의 입력 값을 받기 위해 rope라는 리스트를 만들고 for문을 이용해 받은 변수 a값을 rope에 추가해주는 식으로 코드를 구성했다. 이를 좀 더 간결하게 표현하는 방식도 있다.
rope = [int(sys.stdin.readline()) for _ in range(N)]
이렇게 표현하면 4줄짜리 코드가 1줄로 절약 가능하다.
2. 입력값이 많을 때에는 input 함수를 쓰기보다는 파이썬 라이브러리 중 sys 모듈을 가져와서 쓰면 좋다.
input() -> sys.stdin.readline()
만약 문자열을 입력 받을 때에는 rstrip()도 뒷부분에 추가해주자. 개행문자 \n을 지우기 위함이다.
'Programming > Python' 카테고리의 다른 글
[Python] 백준 1260번(DFS와 BFS) - BFS 알고리즘 (0) | 2021.09.03 |
---|---|
[Python] 백준 4796번(캠핑) - 문자열 포메팅(f-string) (0) | 2021.09.02 |
[Python] 기초 - 숫자값을 입력받아 형태를 변환시켜 출력하기 (0) | 2021.08.23 |