[1206] [S/W 문제해결 기본] 1일차 - View

less than 1 minute read

풀이

전체를 훑으면서 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;
}

Categories:

Updated: