Notice
Recent Posts
Recent Comments
Link
뮁이의 개발새발
[JAVA] 백준 2628 종이자르기 본문
원래 배열에 점선부분을 다 1로 변경해서 할까 생각했는데, 어차피 좌표끼리 비교하는거면 그냥 배열 굳이 안만들고 좌표만 저장해놓고 비교해도 될것 같았다.
그래서 리스트를 세로용, 가로용 두개 만들어서 좌표를 다 추가해주고, 시작점인 0과 끝점인 가로 세로 길이도 넣어주었다. 그리고 오름차순으로 소트하고, 반복문 가로용 세로용 두번 돌면서 각 좌표간의 차이의 최대값을 구해서 그 둘이 곱한 값을 출력해줬음 ㅎ 효율이 좋은편인지는 모르겠다... 풀면 장땡
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class bj2628 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int w = Integer.parseInt(st.nextToken());
int h = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(in.readLine());
LinkedList<Integer> listx = new LinkedList<Integer>();
LinkedList<Integer> listy = new LinkedList<Integer>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(in.readLine());
int path = Integer.parseInt(st.nextToken());
int point = Integer.parseInt(st.nextToken());
if (path == 0) {
listx.add(point);
}
if (path == 1) {
listy.add(point);
}
}
listx.add(h);
listx.add(0);
listy.add(w);
listy.add(0);
listx.sort(null);
listy.sort(null);
int max_x = 0;
for (int i = listx.size() - 1; i > 0; i--) {
int temp = listx.get(i) - listx.get(i - 1);
if (max_x < temp) {
max_x = temp;
}
}
int max_y = 0;
for (int i = listy.size() - 1; i > 0; i--) {
int temp = listy.get(i) - listy.get(i - 1);
if (max_y < temp) {
max_y = temp;
}
}
System.out.println(max_x * max_y);
}
}
'Algorithm' 카테고리의 다른 글
[JAVA] 백준 10163 색종이 (0) | 2021.08.29 |
---|---|
[JAVA] 백준 2559 수열 (0) | 2021.08.29 |
[JAVA] 백준 2635 수 이어가기 (0) | 2021.08.28 |
[JAVA] 백준 2669 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.08.28 |
[JAVA] 백준 10157 자리배정 (0) | 2021.08.28 |
Comments