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

 

10163번: 색종이

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

www.acmicpc.net

문제 요약 : 색종이가 보이는 부분의 면적 출력

입력 출력
1 ≤ N(색종이 수) ≤ 100
색종이 가로, 세로 크기 ≤ 1001
N줄의 x좌표 y좌표 너비 높이
1번부터 N번까지 각 색종이가 보이는 면적 출력

 

JAVA

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_10163.java

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
30731243 cbkpar 10163 100점 25604KB 304ms Java 11 902B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
		int n,i,j,k,a,b,c,d;
		n = Integer.parseInt(br.readLine());
		int[] cnt = new int[n+1];
		int[][] map = new int[1001][1001];
		for(i=1;i<=n;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			a = Integer.parseInt(st.nextToken());
			b = Integer.parseInt(st.nextToken());
			c = Integer.parseInt(st.nextToken());
			d = Integer.parseInt(st.nextToken());
			for(j=a;j<a+c;j++) for(k=b;k<b+d;k++) map[j][k] = i;
		}
		for(i=0;i<1001;i++) for(j=0;j<1001;j++) cnt[map[i][j]]++;
		for(i=1;i<=n;i++) sb.append(cnt[i]+"\n");
		System.out.println(sb);
	}
}

N장의 색종이를 각각  N번이라 하고 배열에 각 종이의 번호를 적는다.

그 후에 배열에 적힌 숫자들을 총합하여 출력한다.

 

예제 ) 

4

0 2 10 10

7 9 8 4

8 4 10 6

6 0 12 10

 

 

첫번째 종이 62 칸

두번째 종이 24 칸

세번째 종이 0 칸

세번째 종이 120 칸

+ Recent posts