Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 색종이(중)(C++) 본문
1671 : 색종이(중)
제한시간: 1000 ms 메모리제한: 32 MB
해결횟수: 654 회 시도횟수: 1949 회
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 둘레의 길이를 구하는 프로그램을 작성하시오.
예를 들어 흰색 도화지 위에 네 장의 검은색 색종이를 <그림 1>과 같은 모양으로 붙였다면 검은색 영역의 둘레는 96 이 된다.
[Copy]4 3 7 5 2 15 7 13 14 | [Copy]96 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | /************************************************************** Problem: 1671 User: a132034 Language: C++ Result: Success Time:0 ms Memory:1140 kb ****************************************************************/ #include <cstdio> #pragma warning (disable:4996) int p[111][111]; int main() { int N; scanf("%d", &N); for (int i = 1; i <= N; ++i) { int sx, sy; scanf("%d%d", &sx, &sy); for (int j = sx; j < sx + 10; ++j) for (int k = sy; k < sy + 10; ++k) p[j][k] = 1; } int res = 0; for (int i = 1; i <= 100; ++i) { for (int j = 1; j <= 100; ++j) { if (p[i][j] == 1) { if (p[i + 1][j] == 0) res++; if (p[i][j + 1] == 0) res++; if (p[i - 1][j] == 0) res++; if (p[i][j - 1] == 0) res++; } } } printf("%d", res); return 0; } | cs |
처음에는 둘레라고 해서 위의 그림과 같은 경우 안쪽은 세지 않는 줄 알았는데 안쪽도 고려해야 되었다.
그렇다면 문제가 상당히 쉬워진다.
그저 상하좌우 중 바깥영역(0인 영역)과 접족하는 부분은 모두 둘레이다.
'PARK > ALGORITHM' 카테고리의 다른 글
알고리즘 & BOJ 2504 괄호의값(C++) (0) | 2016.09.19 |
---|---|
BOJ 3020 개똥벌레(C++) (0) | 2016.09.19 |
실력키우기 오목(C++) (0) | 2016.09.19 |
실력키우기 주사위 쌓기(C++) (0) | 2016.09.19 |
BOJ 1963 소수 경로(C++) (0) | 2016.09.09 |