※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2567번 문제인 색종이 - 2이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2567
2567번: 색종이 - 2
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
도화지를 크기 100x100의 배열로 나타내자. 그리고 붙인 색종이로 덮인 영역을 1, 그렇지 않은 영역을 0으로 배열에 표현하자.
위와 같이 도화지를 나타내면 색종이가 붙은 영역의 둘레는 배열의 1이 있는 칸의 주변(상하좌우) 0의 개수들을 구하는 문제로 바꿔 생각할 수 있다.
입력의 크기가 충분히 작으므로 모든 색종이에 대하여 각각이 도화지에서 차지하는 칸을 1로 직접 표현하는 구현을 하여도 문제를 충분히 해결할 수 있다. 각 칸에 색종이가 덮고 있다고 표현하는 횟수는 많아야 1만번임을 확인하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N;
int board[102][102];
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
while (N--) {
int x, y; cin >> x >> y;
x++, y++;
for (int r = 0; r < 10; r++) {
for (int c = 0; c < 10; c++) {
board[x + r][y + c] = 1;
}
}
}
for (int r = 1; r < 101; r++) {
for (int c = 1; c < 101; c++) {
if (board[r][c]) {
ans += 4 - (board[r - 1][c] + board[r][c + 1] + board[r + 1][c] + board[r][c - 1]);
}
}
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 29543 // C++] Smooth numbers (0) | 2024.02.15 |
---|---|
[BOJ 29542 // C++] Wipe it! (1) | 2024.02.14 |
[BOJ 2578 // C++] 빙고 (1) | 2024.02.12 |
[BOJ 29131 // C++] Хобби (0) | 2024.02.11 |
[BOJ 6123 // C++] Oh Those Fads (1) | 2024.02.10 |