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

 

2669번: 직사각형 네개의 합집합의 면적 구하기

평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으

www.acmicpc.net

코드설명

구현문제입니다.

 

문제에서 유의해야할점은,

문제에서 주어진 그림을 보면 x좌표, y좌표 형태로 되어있습니다.

  • 왼쪽 아래 꼭짓점의 x좌표, y좌표이고 세 번째와 네 번째의 정수는 사각형의 오른쪽 위 꼭짓점의 x좌표, y좌표이다

위의 조건을 행 열로 만들기 위하여 x좌표를 행으로 보고, y좌표를 열로 바꿔서 본다면 이전에 풀듯 모양을 맞추어서 풀 수 있습니다.

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int L, C;
public static int answer = 0;
public static int[][] map;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
map = new int[101][101];
for(int i=0; i<4;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int row1 = Integer.parseInt(st.nextToken());
int col1 = Integer.parseInt(st.nextToken());
int row2 = Integer.parseInt(st.nextToken());
int col2 = Integer.parseInt(st.nextToken());
makeRectangle(row1, col1, row2, col2);
}
for(int i=0;i<101;i++) {
for(int j=0;j<101;j++) {
if(map[i][j] == 1) {
answer += 1;
}
}
}
System.out.println(answer);
}
public static void makeRectangle(int r1, int c1, int r2, int c2) {
for(int i=r1;i<r2; i++) {
for(int j=c1;j<c2; j++) {
map[i][j] = 1;
}
}
}
}

+ Recent posts