백준

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

코메인 2022. 3. 29. 23:49

안녕하세요~ 코딩하는 코알못 코메인입니다.

 

 

https://www.acmicpc.net/problem/2217

 

2217번: 로프

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

www.acmicpc.net


- 문제 -

 

난이도 실버 4 문제이다.

자바에서 입력방식은 scanner와 bufferedreader가 있다.

자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.

bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.

더 자세한 내용은 아래 글 참고 하면 좋다.

https://comain.tistory.com/3

 

(JAVA / 자바) Scanner 와 Bufferedreader

안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자

comain.tistory.com

 

풀이 방법

N개의 로프가 있고, 각 로프는 연결해서 무게 w를 나눠서 버틸 수 있다.

만약 버틸수 있는 무게가 10과 20인 로프가 있다면 최대로 버틸 수 있는 무게는 20이다. 이유는 20을 나눠서 버티면 10으로 10, 20으로 10을 버티게 된다. 만약 여기서 버텨야할 무게가 21이라면, 10.5이니 10으로는 버틸 수 없는 무게가 된다. 여기서 구하는 방법을 알면 좋겠지만, 모를 수도 있으니 예시를 하나 더 보자.

10, 30, 35이다. 그렇다면 버틸 수 있는 무게들을 보자.

세개의 로프로 버틸 경우 30버틸 수 있다. 이유는 최대 무게 / 로프의 개수 = 로프 중 제일 낮은 무게이기때문이다.

두개의 로프로 버틸 경우 30, 35의 로프로는 60을 버틸 수 있다.

한개의 로프로 버틸 경우 35의 로프로는 35를 버틸 수 있다.

그렇다면 버틸 수 있는 최대 무게는 60이 된다.

여기서 풀이 방법을 알 수 있을 것이다.

 

주어진 무게 값을 정렬한다. 제일 낮은 값부터 총 로프의 개수를 곱해준다. 한단계 높은 로프를 계산할때는 로프의 개수에서 1씩 빼준다. 그렇게 나온 값들 중 최댓값을 구해준다.

 

코드를 보자.


-풀이-

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

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[] arr = new int[N];
		int max = 0;
		
		for(int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(br.readLine());
		}
		
		//정렬
		Arrays.sort(arr);
		
		for(int i = 0; i < N; i++) {
			arr[i] *= (N - i);
			if(max < arr[i]) max = arr[i];
		}
		System.out.println(max);
	}

}

-결과-

 


아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.