내가 생각했을때 문제에서 원하는부분
첫줄에는 종이의 가로와 세로의 길이가 차례로 자연수로 주어진다.
가로와 세로의 길이는 최대 100㎝이다.
둘째 줄에는 칼로 잘라야하는 점선의 개수가 주어진다.
셋째 줄부터 마지막 줄까지 한 줄에 점선이 하나씩 아래와 같은 방법으로 입력된다.
가로로 자르는 점선은 0과 점선 번호가 차례로 주어지고, 세로로 자르는 점선은 1과 점선 번호가 주어진다.
입력되는 두 숫자 사이에는 빈 칸이 하나씩 있다.
첫째 줄에 가장 큰 종이 조각의 넓이를 출력한다.
단, 넓이의 단위는 출력하지 않는다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 받는다.
점선 저장: 가로와 세로 점선을 각각 리스트에 저장한다.
정렬: 각 리스트를 정렬하여 점선의 위치를 순서대로 확인한단.
최대 조각 크기 계산:
가로 조각의 최대 높이를 계산한다.
세로 조각의 최대 너비를 계산한다.
결과 출력: 최종적으로 최대 넓이를 계산하여 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
// 백준 2628번 문제
public class Main967 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 종이의 가로와 세로 길이 입력
String[] dimensions = br.readLine().split(" ");
int width = Integer.parseInt(dimensions[0]);
int height = Integer.parseInt(dimensions[1]);
// 자르는 점선의 개수 입력
int cutsCount = Integer.parseInt(br.readLine());
// 가로 및 세로 점선을 저장할 리스트
ArrayList<Integer> horizontalCuts = new ArrayList<>();
ArrayList<Integer> verticalCuts = new ArrayList<>();
// 점선 입력
for(int i = 0; i < cutsCount; i++) {
String[] cut = br.readLine().split(" ");
int type = Integer.parseInt(cut[0]);
int position = Integer.parseInt(cut[1]);
if(type == 0) {
horizontalCuts.add(position);
} else {
verticalCuts.add(position);
}
}
// 점선 정렬
Collections.sort(horizontalCuts);
Collections.sort(verticalCuts);
// 최대 조각의 세로 길이 계산
int maxHeight = 0;
int lastCut = 0;
for(int cut : horizontalCuts) {
maxHeight = Math.max(maxHeight, cut - lastCut);
lastCut = cut;
}
maxHeight = Math.max(maxHeight, height - lastCut); // 마지막 조각
// 최대 조각의 가로 길이 계산
int maxWidth = 0;
lastCut = 0;
for(int cut : verticalCuts) {
maxWidth = Math.max(maxWidth, cut - lastCut);
lastCut = cut;
}
maxWidth = Math.max(maxWidth, width - lastCut); // 마지막 조각
// 최종 결과 출력
int maxArea = maxHeight * maxWidth;
sb.append(maxArea).append("\n");
System.out.print(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.