본문 바로가기
java

백준 2563 색종이 자바 java

by MiaCoder 2024. 1. 10.

색종이 넓이를 구하는 문제이다.

 

복잡해 보이지만 겹치는 부분을 잘 생각하면 쉽게 해결할 수 있다.

 

아이디어 : 도화지를 100*100 이차원 배열로 생각해본다. 그 중 검은 색종이로 인해 채워진 부분만 다르게 나타내면

                간단하게 면적을 구할 수 있다

 

import java.util.Scanner;



public class Main {
    public static void main(String[] args) throws Exception {
    	
    	
    	Scanner sc = new Scanner(System.in);
    	
    	int colorPaper = sc.nextInt(); 
        //좌표를 입력받는 횟수
    	
    	int arrT[][] = new int [100][100];
        // 100*100 이차원 배열 생성
    	
    	for(int i = 0; i < 100; i++) {
    		for(int j = 0; j < 100; j++) {
    			arrT[i][j] = 0;
    		}
    	}
        //검은색 종이로 덮인 부분을 표시하기 위해 이차원 배열을 모두 0으로 채운다
    	
    	
    	
    	for(int i = 0 ; i < colorPaper; i++) {
    		int x = sc.nextInt();
            //왼쪽에서 x만큼 떨어진 것
    		int y = sc.nextInt();
            //아래에서 y만큼 떨어진 것
    	
            
    		int num1 = x;
    		int num2 = 100-y-10;
    		int num3 = x + 10;
    		int num4 = 100 -y;
            //색종이 좌표를 계산하여 배열에 표시하기 위해 변수를 생성했다.
            //(num1, num2)에서 (num3, num4)까지 배열에 채워진 0을 5로 바꾸어 색종이 영역을 표시한다.
            
    		
    		for(int a = num2; a < num4; a++) {
    			for(int b = num1; b < num3; b++) {
    				arrT[a][b] = 5;
                    //이중 for문에서 안쪽이 배열의 가로, 밖이 배열의 세로임을 생각하며 반복문을 작성한다.
    			}
    		}
    	}
    	
//    	for(int i = 0; i < 100; i++) {
//    		for(int j = 0; j < 100; j++) {
//    			System.out.print(arrT[i][j]);
//    		}
//    		System.out.println();
//    	}
// 			테스트를 위한 문장으로 필요시 사용한다.
    	
    	
    	int count = 0;
    	// 색종이 영역을 세기 위한 count
    	for(int i = 0; i < 100; i++) {
    		for(int j = 0; j < 100; j++) {
    			if(arrT[i][j] == 5) {
    				count ++;
    			}
    		}
    	}
        //배열 중 5인 부분만 골라 센다. 
    	
    	System.out.print(count);
    	
    	}
    }