반응형
이번 문제는 색종이를 붙였을 때, 차지하는 둘레를 구하는 것으로 구현을 하면 됩니다.
https://www.acmicpc.net/problem/2567
색종이를 아무 방향이나 붙인다면 아주 어려운 문제가 되겠지만, 축에 평행하게만 붙이고 눈금에 맞추어 붙이기 때문에 색칠하기 문제로 전환해서 풀 수 있습니다.
색종이를 붙일 판을 배열로 설정하고, 색종이를 붙이면 그 영역만큼 색칠하면 됩니다. 물론 트리형태로 만들면 더 빠른 속도로 색칠할 수 있겠지만, 여기서는 단순 구현을 하였습니다.
문제는 둘레의 길이죠. 둘레의 길이는 색이 바뀌는 지점이 됩니다. 옆의 칸이 색칠이 안 되어 있고, 현재 칸이 색칠이 되어 있다면, 둘레의 길이는 1만큼 늘어나게 됩니다.
제가 작성한 소스입니다.
//--------------------------------------------
// baekjoon #2567
// - by Aubrey Choi
// - created at 2019-08-23
//--------------------------------------------
#include <stdio.h>
int main()
{
int n, x, y, ans=0;
static char c[100][100];
scanf("%d", &n);
while(n--)
{
scanf("%d%d", &x, &y);
for(int i=y;i<y+10;i++) for(int j=x;j<x+10;j++) c[i][j]=1;
}
for(int i=0;i<100;i++)
{
for(int j=0;j<100;j++)
{
if(!c[i][j]) continue;
if(i==0||!c[i-1][j]) ans++;
if(j==0||!c[i][j-1]) ans++;
if(i==99||!c[i+1][j]) ans++;
if(j==99||!c[i][j+1]) ans++;
}
}
printf("%d\n", ans);
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2578 빙고(구현) (0) | 2023.08.18 |
---|---|
[C/C++] 백준 #2573 빙산(깊이 우선 탐색) (0) | 2023.07.30 |
[C/C++] 백준 #2565 전깃줄(가장 긴 증가하는 부분수열) (0) | 2023.07.19 |
[C/C++] 백준 #2564 경비원(구현) (0) | 2023.07.18 |
[C/C++] 백준 #2553 마지막 팩토리얼 수(수학) (0) | 2023.07.08 |
댓글