티스토리 뷰

728x90

문제

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

 

10163번: 색종이

평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘

www.acmicpc.net

 

풀이 및 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(br.readLine());
		int[][] arr = new int[1001][1001];
		int max_x = 0;
		int max_y = 0;
		for(int t=1;t<=n;t++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			int w = Integer.parseInt(st.nextToken());
			int h = Integer.parseInt(st.nextToken());
			max_x = Math.max(max_x, x+w);
			max_y = Math.max(max_y, y+h); 
			//이따가 1001칸 다 돌기 싫으니까 색종이 있는 부분만 돌자 !
			
			
			for(int i=y;i<y+h;i++) {
				for(int j=x;j<x+w;j++) {
					arr[i][j] = t;
					//t로 하면 이후단계에서 색종이가 덮히면서 가려지는 부분을 알아서 없앨 수 있다.
				}
			}
		}
		for(int t=1;t<=n;t++) {
			int cnt = 0;
			for(int i=0;i<max_y;i++	) {
				for(int j=0;j<max_x;j++) {
					if(t == arr[i][j]) cnt++;
				}
			}
			System.out.println(cnt);
		}
	}

}
반응형