[1206] [S/W 문제해결 기본] 1일차 - View
풀이
전체를 훑으면서 i,j를 기준으로 좌우 2칸씩 확인하면 된다.
코드
#include <cstdio>
#include <cstring>
int dx[] = {1,-1,2,-2 };
int dy[] = {0,0,0,0 };
int main(void) {
int t = 1;
int nx = 0, ny = 0;
int ans = 0;
while (t<=10) {
ans = 0;
int n = 0, len = 0;
scanf("%d", &n);
int map[1000][255];
for (int i = 0; i < 1000; i++) {
memset(map[i], 0, sizeof(map[i]));
}
for (int i = 0; i < n; i++) {
scanf("%d", &len);
for (int j = 0; j < len; j++) {
map[i][j] = 1;
}
}
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 255; j++) {
bool flag = false;
for (int k = 0; k < 4 && !flag; k++) {
nx = i + dx[k];
ny = j + dy[k];
if (nx < 0 || nx >= 1000) continue;
if (ny < 0 || ny >= 255) continue;
if (map[nx][ny] == 1) flag = true;
}
if (map[i][j] == 1 && !flag) {
ans += 1;
}
}
}
printf("#%d %d\n", t, ans);
t++;
}
return 0;
}