-
백준 2217번 : 로프 - 파이썬 (python)알고리즘/그리디 2021. 4. 2. 01:02
* 방법1
- 아이디어
문제가 이해가 안가는데 테스트케이스도 하나밖에 없어서 질문 게시판에서 반례 예시를 참고했다.
(1) 입력받은 데이터를 내림차순으로 정렬한다.
(2) data[0] / data[0], data[1] / data[0], data[1], data[2] / data[0], data[1], data[2],data[3] / data[0], data[1], data[2], data[3], data[4] 의 경우로 나누어 생각한다.
· data[0] 의 경우 최대 중량
data[0] * 1
· data[0], data[1] 의 경우 최대 중량
data[1] * 2 (내림차순으로 정렬했으므로 data[0] > data[1]이고 총 로프 수가 2)
· data[0], data[1], data[2] 의 경우 최대 중량
data[2] * 3 (내림차순으로 정렬했으므로 data[2]가 최소값이고 총 로프 수가 3)
· data[0], data[1], data[2], data[3] 의 경우 최대 중량
data[3] * 4 (내림차순으로 정렬했으므로 data[3]가 최소값이고 총 로프 수가 4)
· data[0], data[1], data[2], data[3], data[4] 의 경우 최대 중량
data[4] * 5 (내림차순으로 정렬했으므로 data[4]가 최소값이고 총 로프 수가 5)
(3) 위 값들을 계산해서 result 리스트에 append하고 max값 출력
- 테스트케이스
5
1
2
3
4
5
(1) data = [5, 4, 3, 2, 1]
(2) data[0] 의 경우 최대 중량은 data[0] * 1 = 5
data[0], data[1] 의 경우 최대 중량은 data[1] * 2 = 8
data[0], data[1], data[2] 의 경우 최대 중량은 data[2] * 3 = 9
data[0], data[1], data[2], data[3] 의 경우 최대 중량은 data[3] * 4 = 8
data[0], data[1], data[2], data[3], data[4] 의 경우 최대 중량은 data[4] * 5 = 5
(3) result = [5, 8, 9, 8, 5] 이고 max(result) = 9
n = int(input()) # 로프의 수 data = [] # 각 로프들에 대한 정보 result = [] for i in range(n): x = int(input()) data.append(x) data.sort(reverse=True) for i in range(n): result.append((i+1)*data[i]) print(max(result))
github.com/501501/baekjoon/blob/master/%EA%B7%B8%EB%A6%AC%EB%94%94/2217.py
'알고리즘 > 그리디' 카테고리의 다른 글
백준 2437번 : 저울 - 파이썬 (python) (0) 2021.04.03 백준 11047번 : 동전 0 - 파이썬 (python) (0) 2021.04.01 백준 2839번 : 설탕 배달 - 파이썬 (python) (0) 2021.03.30 백준 4889번 : 안정적인 문자열 - 파이썬 (python) (0) 2021.03.25 백준 16953번 : A → B - 파이썬 (python) (0) 2021.03.25