일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준9095
- 1463
- for문
- C++ 공백 입력
- C++ 백준
- 패스트캠퍼스
- precision
- 혁펜하임강의후기
- pytorch
- AIDEEPDIVE
- c++ 기초
- 혁펜하임강의
- 비교연산자
- C++ 함수
- 9095
- 반복문
- 혁펜하임AI
- CUDA
- 백준
- 혁펜하임
- 백준C++
- 1로만들기
- 백준1463
- 패스트캠퍼스혁펜하임
- cuDNN
- C++
- AI강의
- 조건문
- tensorflow
- 백준1026
- Today
- Total
코딩하는 덕구 🐶
67. Python 백준 2217 번 로프 자세한 설명 본문
안녕하세요 코딩하는 덕구입니다.
Python 백준 2217 번 로프 입니다.
그리디 알고리즘 문제입니다.
https://www.acmicpc.net/problem/2217
2217번: 로프
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하
www.acmicpc.net
로프들을 이용해 들어올릴 수 있는 최대 중량을 구하는 문제이므로
만약 로프 3개가 주어진다면
로프 1개가 들어올릴 수 있는 최대 중량,
로프 2개가 들어올릴 수 있는 최대 중량,
로프 3개가 들어올릴 수 있는 최대 중량을 비교해서 가장 높은 중량을 선택하면 되겠죠.
그럼 이 중량들은 어떻게 구하면 될까요?
로프 1개의 최대 중량은 로프들 중에 최대 중량이 가장 높은 로프를 선택하면 되겠죠.
로프 2개의 최대 중량은 로프들 중에 최대 중량이 가장 높은 순서대로 1번 로프, 2번 로프를 선택한 후
2번 로프의 최대 중량에 2를 곱하면 됩니다.
로프들 중에 가장 약한 로프가 버틸 수 있는 최대 중량까지 중량을 걸어야 최대 중량이기 때문이죠.
그럼 로프가 3개라면?
3개의 로프 중 가장 약한 로프가 버틸 수 있는 최대 중량 * 3을 해주면 됩니다.
j개라면?
가장 약한 로프 최대중량 * j 가 되겠죠.
그럼 위의 직관을 가지고 코드를 구현해봅시다.
로프들을 리스트 안에 저장한 후 내림차순으로 정렬합니다.
N = int(input())
ropes = []
for _ in range(N):
ropes.append(int(input()))
ropes.sort(reverse=True)
각 로프의 개수마다 최대 중량을 저장할 리스트 weights를 선언한 후
weights = []
for j in range(N):
weights.append(ropes[j] * (j+1))
print(max(weights))
ropes는 큰 수부터 작은 수 순서대로 정렬된 리스트 이므로
ropes 안의 j번 째 로프는 j개의 로프 중 최대 중량이 가장 작은 로프가 되고,
j+1은 로프의 개수가 되므로 ropes[j] * (j+1)은
j+1개의 로프들을 이용한 최대 중량을 찾는 식이 됩니다.
이 값들을 로프들의 개수별 최대 중량을 저장할 weights 리스트에 저장 한 후
가장 큰 값을 출력하면 답이 되겠죠
Python 백준 2217 번 로프 최종 코드입니다.
N = int(input())
ropes = []
for _ in range(N):
ropes.append(int(input()))
ropes.sort(reverse=True)
weights = []
for j in range(N):
weights.append(ropes[j] * (j+1))
print(max(weights))
Python 백준 2217 번 로프 자세한 설명이었습니다.
감사합니다.
'알고리즘 문제 풀이' 카테고리의 다른 글
69. Python 백준 2606 번 바이러스 자세한 설명 (0) | 2023.01.05 |
---|---|
68. C++ 백준 2217 로프 자세한 설명 (1) | 2023.01.05 |
66. C++ 백준 1003 번 피보나치 함수 자세한 설명 (0) | 2023.01.04 |
65. Python 백준 1003 번 피보나치 함수 자세한 설명 (0) | 2023.01.04 |
64. C++ 백준 5585 번 거스름돈 (0) | 2023.01.01 |