문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다.
출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
예제 입출력
https://www.acmicpc.net/problem/2563
2563번: 색종이
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변
www.acmicpc.net
문제 풀이
먼저 흰색 도화지의 크기의 평면을 만들어 전부 0으로 채워준다.
그 후, 검은색 색종이의 위치가 주어지면 for문을 사용해 검은색 색종이가 위치한 부분을 1로 만들어 색종이가 있다는 것을 표시해준다. 물론 이미 1인 곳은 제외하고 0일때만 1로 바꿔주도록 조건을 추가해준다.
그리고 1인부분을 세어주면 그것이 색종이가 붙은 영역의 넓이가 된다.
최종 코드
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int x, y;
int area = 0;
int paper[100][100] = { 0, };
for (int i = 0; i < n; i++) {
cin >> x >> y;
//색종이 색칠
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (paper[j + x][k + y] == 0)
paper[j + x][k + y] = 1;
}
}
}
// 색종이의 넓이
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (paper[i][j] == 1)
area += 1;
}
}
cout << area;
}
'[Baekjoon] C++ > Silver' 카테고리의 다른 글
[baekjoon] 10773 : 제로 (0) | 2023.08.26 |
---|---|
[baekjoon] 10814 : 나이순 정렬 (0) | 2023.08.26 |
[baekjoon] 11651 : 좌표 정렬하기2 (C++) (1) | 2023.08.22 |
[baekjoon] 11650 : 좌표 정렬하기 (C++) (0) | 2023.08.22 |
[baekjoon] 1049 : 기타 (C++) (0) | 2023.08.20 |