scone-lemon

[IM 대비] BOJ_10163 색종이 본문

ALGORITHM/BOJ

[IM 대비] BOJ_10163 색종이

lemon-scone 2021. 8. 24. 20:04

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

 

10163번: 색종이

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

www.acmicpc.net

 

package IM;

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

// 색종이
public class BOJ_10163 {
	
	public static int x, y, w, h;
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		int N = Integer.parseInt(br.readLine());
		int[][] map = new int[101][101];
		
		for (int n = 1; n <= N; n++) {
			
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			x = Integer.parseInt(st.nextToken());
			y = Integer.parseInt(st.nextToken());
			w = Integer.parseInt(st.nextToken());
			h = Integer.parseInt(st.nextToken());
			
			for (int i = x; i < x+w; i++) {
				for (int j = y; j < y+h; j++) {
					map[i][j] = n;
				}
			}
		} // map 저장
		
		for (int n = 1; n <= N; n++) {
			
			int count = 0;
			for (int i = 0; i < map.length; i++) {
				for (int j = 0; j < map.length; j++) {
					if(map[i][j] == n) {
						count++; 
					}
				}
			}
			sb.append(count).append("\n");
		} // map 탐색
		
		System.out.println(sb.toString());
	}
}

 

package IM;

import java.util.Scanner;

// 색종이
public class BOJ_10163_sol {
	public static void main(String[] args) {
		
		int[][] map = new int[1001][1001];
		Scanner sc = new Scanner(System.in); 
		// 인풋이 int로 들어오면서 공백으로 나누어 질 때 Scanner 사용하는 편
		
		int N = sc.nextInt();
		
		for (int n = 1; n <= N; n++) {
			
			int si = sc.nextInt(); // start i
			int sj = sc.nextInt(); // start j
			int h = sc.nextInt(); // i에 대해서 색종이 칠할거임
			int w = sc.nextInt(); // j에 대해서 색종이 칠할거임
			
			for (int i = si; i < si+h; i++) {
				for (int j = sj; j < sj+w; j++) {
					map[i][j] = n;
				}
			}
		}
		
		int[] area = new int[N+1]; // 1~N 색종이까지 넓이 기록해야 하기 때문에
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map.length; j++) {
				area[map[i][j]]++;
			}
		}
		for (int i = 1; i <= N; i++) {
				System.out.println(area[i]);
		}
	}
}