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

[백준]BOJ_2563_색종이_S5

by 개복치96 2023. 2. 15.
반응형

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

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

1. 접근

  • 한 도화지에 색종이를 여러장 놓고 색종이가 붙은 검은 영역의 넓이를 구하는 문제이다.
  • 넓이를 구하는 것이라고 해서 수학적으로 접근하여 겹치는 넓이부터해서 구하려고 하면 매우 복잡해진다.
  • 도형의 넓이를 구할때 가로와 세로를 곱해서 구할 수도 있지만, 1cm x 1cm의 칸으로 나눠서 하나씩 셀 수도 있다.
  • 이 문제도 위와같이 접근한다.
  • 도화지에 100 x 100으로 모눈이 그려져 있고, 색종이를 붙인 다음 그 모눈을 하나씩 칸을 세면 된다.
  • 겹쳐져진다고 해서, 한장 붙여진것 위에 한장이 더 붙는다고 해서 달라지는건 없다. 영역은 똑같다.

2. 구현

  • 이차원 배열에 색종이가 붙은 부분을 1로 표시하였다면 이중for문을 사용하여 (0,0)부터 (100,100)까지 모든 칸을 순차적으로 방문하며 1을 만날때마다 카운트를 해준다.
package com.ssafy.offlline08;

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

public class BOJ_2563_색종이_S5_2 {
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken()); //색종이의 수가 주어진다.
		
		int[][] paper = new int[100][100]; //100 by 100 인 도화지
		
		for(int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			
			int x = Integer.parseInt(st.nextToken()); //첫번째 자연수는 x 좌표
			int y = Integer.parseInt(st.nextToken()); //두번째 자연수는 y 좌표
			
			for(int j = x; j < x + 10; j++) {
				for(int k = y; k < y + 10; k++) {
					paper[j][k] = 1;
				}
			}
			
		}
		int count = 0;
		for(int j = 0; j < 100; j++) {
			for(int k = 0; k < 100; k++) {
				if(paper[j][k] == 1) {
					count += 1;
				}
			}
		}
		System.out.println(count);
	}
}
반응형