https://www.acmicpc.net/problem/2217
2217번: 로프
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하
www.acmicpc.net
예제풀이
n: 2
10
15
2개의 로프가 각각 10 15를 들 수 있음.
10인 로프는 10이 넘어가는 순간 끊어짐
예제의 최대 무게는 20이된다.
n: 5
3
7
1
10
5
이런경우에는 줄을 5개를 쓰는 것이 불필요하다
1이 5개인 경우엔 고작 5까지밖에 못들지만
최대가 10이므로 하나를 쓰는게 더 나은 경우다
내림차순으로 정렬해보자
모든 경우의 수를 생각해보면
10 -> 10
7 -> 14
5 -> 15
3 -> 12
1 -> 5
여기서 규칙을 찾을 수 있다
10 => 10 *1( index 0 ) : 10
7 => 7 * 2 ( index 2 ) : 14
5 => 5 * 3 ( index 3 ) : 15
3 => 3 * 4 ( index 4 ) : 12
1 => 1 * 5 ( index 5 ) : 5
오름차순으로 정렬한 경우 index 값+1을 곱해주면 해당 로프의 최대 무게를 구할 수 있다.
각 값을 배열에 넣어서 max값을 뽑아주거나(정수가 10000까지 밖에 안되므로 가능한일)
아니면 반복문마다 max값을 비교해서 max값을 리턴해주자
하지만 처음에는 index규칙을 생각못하고 바로 반복문을 돌려버려서
메모리 초과가 나왔다.
n = int(input())
maxWeight =[int(input()) for i in range(n)]
maxWeight.sort(reverse=True)
weightList = []
for (idx, i) in enumerate(maxWeight):
for j in range(idx + 1):
weight = (j+1) * i
weightList.append(weight)
print(max(weightList))
1. 오름차순, 배열에 넣는 방식으로 풀이 (enumerate사용)
n = int(input())
maxWeight =[int(input()) for i in range(n)]
maxWeight.sort(reverse=True)
weightList = []
for (idx, i) in enumerate(maxWeight):
weight = i * (idx + 1)
weightList.append(weight)
print(max(weightList))
채점시간이 너무 오래 걸려서 뭐가 잘못된줄 알았는데 input()을 써서 그런거엿음
2. 내림차순, 배열에 넣는 방식으로 풀이
n = int(input())
maxWeight =[int(input()) for i in range(n)]
maxWeight.sort()
weightList = []
for i in maxWeight:
weight = i * n #enumerate를 사용한 인덱스 값은 필요없고 n으로 해결가능
weightList.append(weight)
n -=1
print(max(weightList))
3. 내림차순, max비교 방식으로 풀이
import sys
inp = sys.stdin.readline
n = int(inp())
maxWeight =[int(inp()) for i in range(n)]
maxWeight.sort()
maxResult = 0
for i in maxWeight:
weight = i * n
n -=1
if weight > maxResult:
maxResult = weight
print(maxResult)
시간은 2,3번이 비슷하나 3번이 메모리 차지가 적으므로 제일 최적의 풀이법이 아닐까 한다.
물론 더 간편하게 풀이하신 분들도 있겠지만...
'Coding Test' 카테고리의 다른 글
백준 17478 - 재귀함수가 뭔가요? (0) | 2022.12.17 |
---|---|
백준 1439 - 뒤집기 ( Python ) (0) | 2022.12.09 |
백준 5585 - 거스름돈 ( Python ) (2) | 2022.11.29 |
백준 1541 - 잃어버린 괄호 ( Python ) (0) | 2022.11.27 |
백준 11047 - 동전 0 (Python) (0) | 2022.11.25 |