-
[백준/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는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(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); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1543번 : 문서 검색 (JAVA / 자바) (2) 2022.04.06 [백준/BOJ] 4948번 : 베르트랑 공준 (JAVA / 자바) (0) 2022.03.28 [백준/BOJ] 9020번 : 골드바흐의 추측 (JAVA / 자바) (0) 2022.03.27 [백준/BOJ] 9461번 : 파도반 수열 (JAVA / 자바) (0) 2022.03.26 [백준/BOJ] 1789번 : 수들의 합 (JAVA / 자바) (0) 2022.03.25