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