1. 문제 상세
https://www.acmicpc.net/problem/2563
2. 문제 접근
크기가 100*100인 정수 배열을 선언하여 색종이가 덮이지 않은 부분을 0, 덮인 부분을 1로 판단하자.
색종이의 개수를 입력받아 그만큼 반복문을 실행한다.
반복문에서 도화지에 색종이를 놓을 좌표를 입력받는다.값에 3, 7을 입력 받은 경우, 배열의 7번 행 3번 열부터 부터 이를 기준으로 16번행, 7번행 까지 사각형으로 배열의 원소들을 1로 바꾼다.위와 같이 좌표에 따라 배열의 원소 값을 바꿔준 후, 배열을 순회하며 배열의 값이 1인 경우, 넓이를 저장할 변수에 1을 더해주자.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int a[100][100] = { { 0, }, }, n, x, y, area = 0;
cin >> n;
for(int i = 0; i < n; i++) {
cin >> x >> y;
for(int k = x; k < x + 10; k++) {
for(int l = y; l < y + 10; l++) {
a[k][l] = 1;
}
}
}
for(int i = 0; i < 100; i++) {
for(int j = 0; j < 100; j++) {
if(a[i][j] == 1) area++;
}
}
cout << area;
}
크기가 100*100인 정수형 배열 a 를 선언하고 값을 모두 0으로 초기화한다.
정수형 변수 n, x, y, area 를 선언하고 area 를 0으로 초기화한다.
cin 으로 색종이 개수를 입력받아 n 에 저장한다.
for문으로 i 가 0부터 n 보다 작을 때 1씩 더하며 반복하도록 한다.
반복에서는 cin 으로 색종이의 위치를 입력받아 각각 x, y 에 저장한다.
for문으로 k 가 x 부터 x + 10 값보다 작을 때 1씩 더하며 반복하도록 한다.다시 for문으로 l 이 y 부터 y + 10 값보다 작을 때 1씩 더하며 반복하도록 한다.반복에서는 a[k][l] 위치의 값을 1로 바꾼다.
위의 반복이 모두 끝나면 for문으로 i 가 0부터 100보다 작을 때 1씩 더하며 반복하도록 한다.다시 for문으로 j 가 0부터 100보다 작을 때 1씩 더하며 반복하도록 한다.반복에서는 if문으로 a[i][j] 위치의 값이 1이라면 area 변수에 1을 더하도록 한다.
반복이 끝나면 cout 으로 area 변수의 값을 출력한다.
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 2차원 배열' 카테고리의 다른 글
[백준] 10798번 : 세로읽기 | C++ (0) | 2023.10.12 |
---|---|
[백준] 2566번 : 최댓값 | C++ (0) | 2023.10.12 |
[백준] 2738번 : 행렬 덧셈 | C++ (0) | 2023.10.12 |