⚙️ 알고리즘/백준

[백준] 2217 - 로프 (다시풀기)

dev_zoe 2021. 3. 4. 05:25
반응형

www.acmicpc.net/problem/2217

 

2217번: 로프

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하

www.acmicpc.net

1차 풀이)

일단 예시답안 자체가 이해가 안됐다.. 그래서 검색해서 찾았을때, suri78.tistory.com/29 이 블로그 글이 가장 이해가 잘되어서 예제를 이해한 뒤 아이디어를 떠올렸다.

 

위 페이지에서의 로프가 버틸 수 있는 중량이 각각 rope1 : 10, rope2: 15 일때

rope1을 사용한다면 rope2도 버틸 수 있으므로 최대 20을 버틸 수 있음.

rope2를 사용한다면 rope1은 15을 버틸 수 없으므로 최대 15를 버틸 수 있음.

그러므로 이 두 로프를 사용했을 때 버틸 수 있는 최대값은 20

 

여기서 각각의 로프에서 버틸 수 있는 최대값을 구해서 그 중 최대값을 반환해야함을 알 수 있다.

그럼 최대값을 어떻게 구할까?

 

우선 내림차순으로 정렬한 후에

두번째로 중량이 큰 로프는 *2, 세번째는 *3...이런식으로 해서 곱한 것중 최대값이 로프 세개로 버틸 수 있는 중량의 최대값이다.

 

N = int(input())
rope_list = []
for i in range(N):
  rope_list.append(int(input()))

rope_list.sort(reverse=True) # 내림차순 정렬
answer = rope_list[0]

for i in range(N):
  if answer<rope_list[i]*(i+1):
    answer = rope_list[i]*(i+1)

print(answer)

 

반응형

'⚙️ 알고리즘 > 백준' 카테고리의 다른 글

[Swift] 백준 10610 - 30  (0) 2023.01.26
[Swift] 백준 2895 - 대회 or 인턴  (0) 2023.01.26
[백준/파이썬] 2869 - 달팽이는 올라가고싶다  (0) 2021.04.25
[백준] 11399 - ATM  (0) 2021.03.04
[백준] 11047 - 동전 0  (0) 2021.03.04