💻STUDY/BOJ

[BOJ] 2563. 색종이 (C)

coldNoodlePigeon 2022. 2. 22.
  • 코딩 초보

2563. 색종이 

 

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

 

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

 

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

 


c언어로 구현하였다. 

 

#include <stdio.h>

main() {
	int n, loc[100][100] = { 0, },x,y,answer=0;
	scanf("%d", &n); 
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &x, &y);
		for (int i = x; i < x + 10; i++) {
			for (int j = y; j < y + 10; j++) {
				loc[i][j] = 1; 
			}
		}
	}

	for (int i = 0; i < 100; i++) {
		for (int j = 0; j < 100; j++) {
			if (loc[i][j] == 1) answer++; 
		}
	}
	
	printf("%d", answer); 
}

 

2차원 배열을 이용하여 쉽게 풀 수 있는 문제다.

처음에는 전체 300에서 겹치는 부분을 찾아서 일일히 빼주려고 했는데, 겹치는 경우가 많은 경우의 수가 생기므로, 다르게 접근해야했다. 

 

2차원 배열을 만들어주어서 정사각형이 있는 부분들만을 1*1씩 쪼개서 0으로 초기화 되어 있는 2차원 배열에 저장해주면 된다. 

만약 겹치는 부분이 있더라도, 똑같이 1이 저장되어 있기 때문에 중복되어 count되는 경우는 없다. 

 

그리고 다시 이중 for문을 이용하여 2차원 배열을 검토하여 1이 있는 경우, answer을 1씩 증가시켜서 1*1의 정사각형의 개수를 세도록 하면 된다. 

'💻STUDY > BOJ' 카테고리의 다른 글

[BOJ] 9012. 괄호 (Python)  (0) 2022.02.24
[BOJ] 10998. 팰린드롬인지 확인하기 (C)  (0) 2022.02.23
[BOJ] 1181. 단어 정렬 (Python)  (0) 2022.02.21
[BOJ] 10816. 숫자 카드 2 (Python)  (0) 2022.02.20
[BOJ] 9625. BABBA (C)  (0) 2022.02.19

댓글