SWExpertAcademy의 콩 많이 심기(4301 / D4) 문제이다.
[ 문제풀이 ]
1) 문제에서 제시한 길이인 '2'는, 다음과 같은 좌표간의 관계이다.
(x, y)가 현재 좌표라고 가정한다면, 상하좌우로 -2, + 2씩 움직인 좌표들이 제시한 길이인 '2'에 해당하는 좌표들이다.
현재 파랑점에 콩이 있다면, 'A', 'B', 'C', 'D'에 해당하는 좌표들에는 콩을 심지 못한다는 의미이다.
본인은 맵의 처음부터 끝까지 탐색하면서, 현재좌표에서 위에서 말한 좌표들에 콩이 심어져 있는지를 체크해보고,
없으면 콩을 심는 방식으로 구현을 하였다.
[ 소스코드 ]
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include<iostream> #include<cstring> #define endl "\n" #define MAX 1000 using namespace std; int N, M, Answer; bool MAP[MAX][MAX]; int dx[] = { 0, 0, 2, -2 }; int dy[] = { 2, -2, 0, 0 }; void Initialize() { Answer = 0; memset(MAP, false, sizeof(MAP)); } void Input() { cin >> N >> M; } bool Check(int x, int y) { for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx >= 0 && ny >= 0 && nx < N && ny < M) { if (MAP[nx][ny] == true) return false; } } return true; } void Solution() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (Check(i, j) == true) { MAP[i][j] = true; Answer++; } } } } void Solve() { int Tc; cin >> Tc; for (int T = 1; T <= Tc; T++) { Initialize(); Input(); Solution(); cout << "#" << T << " " << Answer << endl; } } int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen("Input.txt", "r", stdin); Solve(); return 0; } | cs |
'[ SWEA Code ] > # SWEA - ' 카테고리의 다른 글
[ SWEA 6719 ] 성수의 프로그래밍 강좌 시청 (C++) (0) | 2020.03.18 |
---|---|
[ SWEA 4112 ] 이상한 피라미드 탐험 (C++) (0) | 2020.03.12 |
[ SWEA 4111 ] 무선 단속 카메라 (C++) (0) | 2020.03.11 |
[ SWEA 6109 ] 추억의 2048 게임 (C++) (0) | 2020.03.11 |
[ SWEA 7088 ] 은기의 송아지 세기 (C++) (0) | 2020.03.09 |