코테/백준

[백준/JAVA] 2217번: 로프

imname1am 2023. 6. 8. 17:56
반응형

🔺 문제

 

2217번: 로프

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

www.acmicpc.net

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int N = Integer.parseInt(br.readLine());
        int[] rope = new int[N];
        
        for(int i = 0 ; i < N ; i++) {
            rope[i] = Integer.parseInt(br.readLine());
        }
        
        Arrays.sort(rope);
        
        int max = Integer.MIN_VALUE;  
        for(int k = 0 ; k < N ; k++) {
            max = Math.max(max, rope[k] * (N - k));
        }
 
        System.out.println(max);
    }
}
cs
✅ 해결 아이디어
✔ 그리디...
- 최대 무게 w = min(병렬 연결된 로프의 중량) * 병렬 연결된 로프 수
rope[k] * (N - k)

 

특정 로프를 사용할 경우, 그 로프보다 무게가 큰 로프를 모두 사용하는 것이 이득이므로 위와 같은 식을 활용한다.

 

예) [12, 20, 30, 33, 35]

  • n = 0 일때 12 * 5 = 60 (12 20 30 33 35)
  • n = 1 일때 20 * 4 = 80 (20 30 33 35)
  • n = 2 일때 30 * 3 = 90 (30 33 35)
  • n = 3 일때 33 * 2 = 40 (33 35)
  • n = 4 일때 35 * 1 = 40 (35)

이 중 90이 제일 큰 값이므로, 이 값을 정답으로 출력한다.

 


🔺 다른 풀이들

- 악 이 분 글 보고 좀 이해했다...

 

[백준-2217]-[그리디알고리즘]-로프

문제링크 : https://www.acmicpc.net/problem/2217 이문제는 병렬로 연결된 로프가 버틸 수 있는 최대 중량이 얼마나 되는지 물어보는 문제이다. 로프가 한개일 때는 로프가 버틸 수 있는 한계가 최대 중량

pangsblog.tistory.com

 

 

- 입력받은 숫자 배열을 역순으로 정렬하고, 최대 중량을 (사용하는 로프 中 견딜 수 있는 중량이 가장 적은 로프) * (현재 사용하는 로프 수)로 설정한다. 반복문을 통해 사용하는 로프 수를 하나씩 늘리며 최대 중량을 갱신하는 풀이

 

백준 2217번 로프 (JAVA)

백준 2217번 로프 (JAVA)

velog.io

 

[백준-2217]-[그리디알고리즘]-로프

문제링크 : https://www.acmicpc.net/problem/2217 이문제는 병렬로 연결된 로프가 버틸 수 있는 최대 중량이 얼마나 되는지 물어보는 문제이다. 로프가 한개일 때는 로프가 버틸 수 있는 한계가 최대 중량

pangsblog.tistory.com


💬 느낀 점

w/k 저 식을 써야하나.. 싶어서 고민을 해보았는데

참고용이지 꼭 쓰이는 건 아니었다고 한다..

 

1회독 2회독 3회독 4회독 5회독
V 240416      

(참고)

✔ 풀이 참고

 

[BOJ] 백준 2217번 : 로프 (JAVA)

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

steady-coding.tistory.com

 

백준 2217번 로프 (JAVA)

백준 2217번 로프 (JAVA)

velog.io

 

반응형