안녕하세요 놀이방사장입니다.
이번 포스팅은 백준
2217 "로프"
문제 풀이입니다.
2217번: 로프
N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하
www.acmicpc.net
문제설명
K의 개의 로프가 주어줍니다.
각 로프의 사양은 주어집니다.
로프를 이용해 들 수 있는 최대 무게를 구하는 문제입니다.
모두 고르게 중량이 걸린다고 적혀있습니다.
이 뜻은 위에 예제로 예시를 들면
10,15 두개를 같이 사용하면 저기서 제일 낮은 수의 10 * (로프의개수) 가 최대중량입니다.
15를 혼자 쓸 경우 15가 최대 중량이라는 뜻입니다.
그래서 무조건 로프를 많이 쓴다고 들 수 있는 최대 중량이 느는 게 아닙니다.
ex ) 10 25 75 로프가 주어집니다.
여기서 3가지 다 봅니다.
10 25 75 쓸 때 (10 * 3 ) = 30
25 75 쓸 때 (25 *2) = 50
75 쓸 떄 = (75*1) = 75
이럴 떄는 75짜리 로프 하나쓰는 게 최대중량을 들 수 있습니다.
이걸 코드로 구현 해줍시다
/*
백준 2217 로프
* */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
public class Main{
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
ArrayList<Integer> arr = new ArrayList<>();
int n = Integer.parseInt(br.readLine());
for(int i = 0; i<n; i++){
arr.add(Integer.parseInt(br.readLine()));
}
Collections.sort(arr);
int max = 0;
int cnt = 0;
int arrLen = arr.size();
for(int i = 0; i<arrLen; i++){
int tmpMax = (arr.get(i) * (arrLen-cnt));
cnt++;
if(tmpMax > max){
max = tmpMax;
}
}
System.out.println(max);
}
}
먼저 ArrayList에 로프의 각각 최대중량을 추가해줍니다.
그리디 방법을 이용해서 가벼운 중량 * 가지고있는 로프수
그 후 에는 두 번째로 가벼운 중량 * (가지고 있는 로프수 - 두번째로 가벼운 중량보다 더 작은 중량을 들 수 있는 로프의 수)
반복하여 최대 중량을 찾는 코드입니다.
더 궁금하신 점이 있으시면 댓글남겨주세요
감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2606] 바이러스 - JAVA - [DFS] (1) | 2024.01.28 |
---|---|
[백준 1463] 1로만들기 - JAVA - [DP] (0) | 2024.01.28 |
[백준 1620] 나는야 포켓몬 마스터 이다솜 - JAVA [HashMap 사용] (1) | 2024.01.14 |
[백준 4949] 균형잡힌 세상 - JAVA [스택 사용] (1) | 2024.01.14 |
[백준 1764] 듣보잡 - JAVA [HashMap 사용] (0) | 2024.01.14 |