본문 바로가기
programming/알고리즘 풀이

[백준(Baekjoon)] 2563.색종이

by 몽구스_ 2021. 8. 11.
728x90

 

[백준(Baekjoon)] 2563.색종이

 

 

 

2563번: 색종이

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

www.acmicpc.net

 

 

[입력]

 

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다

 

 

[출력]

 

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

 

 

[풀이]

 

사각형에 해당하는 배열 칸을 1로 설정했다.

사각형이 겹쳐도 어차피 1이어서 두번 세는 일이 없도록 했다.

그리고 사각형의 한칸 넓이가 1이기 때문에 1~10에 해당한다.

따라서 사각형의 x좌표와 y좌표는 0~9까지 더해야한다.

마지막으로 도화지에 있는 모든 1을 더해준다.

 

 

 

public class algo2563 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt(); //사각형의 갯수
		int[][] white = new int[101][101];
		int totalSize = 0; //총 넓이

		
		for (int i = 0; i < N; i++) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			for (int j = 0; j < 10; j++) {
				for (int k = 0; k < 10; k++) {
					white[x+j][y+k] = 1; //사각형에 해당하는 배열을 1로 만들기
				}
				
			}
		}
		
		for (int i = 0; i < 101; i++) {
			for (int j = 0; j < 101; j++) {
				if(white[i][j] == 1) { //1이 있는 곳만 총 넓이에 더한다
					totalSize++;
				}
			}
		}
		
		System.out.println(totalSize);
	}

}

 

 

 

메모리 시간 언어 코드 길이
17868 240 Java 11  589

댓글