본문 바로가기
알고리즘/백준

[JAVA]백준_10163_색종이

by 박 현 황 2021. 2. 23.

문제링크

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.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

	static int map[][] = new int[101][101];
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		Queue<Node> q = new LinkedList<>();
		
		int N = Integer.parseInt(br.readLine()); //색종이 몇장인지
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine());
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			int width = Integer.parseInt(st.nextToken());
			int height = Integer.parseInt(st.nextToken());
			q.offer(new Node(x,y,width,height));
//			q.offer(new Node(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()));
			
			for(int row = x;row<x+width;row++) {
				for(int col = y;col<y+height;col++) map[row][col] = (i+1);
			}
		}//일단 색종이 입력
		
		for(int i=0;i<N;i++) {
			int sum = 0;
			Node node = q.poll();
			
			for(int row=node.x;row<(node.x+node.width);row++) {
				for(int col = node.y;col<(node.y+node.height);col++) {
					if(map[row][col] == (i+1)) sum++;
				}
			}
			
			System.out.println(sum);
		}
			
		//가장 왼쪽아래에 있는 좌표와 너비 높이를 차례로 입력받는다.
	}
	
	static class Node{
		int x;
		int y;
		int width;
		int height;
		public Node(int x, int y, int width, int height) {
			super();
			this.x = x;
			this.y = y;
			this.width = width;
			this.height = height;
		}
	}
}

 


전체 배열?의 크기가 크지않아서 배열을 선언해준 뒤 채워주는 형식으로 풀었다.

색종이 N개를 입력받아서 겹쳐지 부분 빼고 나머지의 면적을 구하는 것이라서

1번째 색종이는 1로 채우고 2번째 색종이는 넓이만큼 2로 채우고 하는 식으로 구현하였다.

 

일단 왼쪽 아래의 좌표와 가로 세로 값을 입력받기 위한 class를 생성하였다.

 

일단 먼저 배열을 색종이 넓이 만큼 채우고 나중에 탐색하면서 면적을 구할 것이라서 위의 자표를 저장할 공간이 필요했다.

따라서 Queue<Node> q를 생성하여서 큐에 저장하였다.

 

먼저 입력받은 값을 큐에 저장하고 배열도 채워주고

나중에 큐에서 1번째 색종이의 좌표를 빼면서 면적을 구해주었다.

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_10157_자리배정  (0) 2021.02.25
[JAVA]백준_14696_딱지놀이  (0) 2021.02.23
[JAVA]백준_13300_방배정  (0) 2021.02.23
[JAVA]백준_2605_줄세우기  (0) 2021.02.23
[JAVA]백준_4963_섬의 개수  (0) 2021.02.19