BAEKJOON/graphs
[baekJoon16956] 늑대와 양(BFS/DFS)
ferozsun
2020. 8. 3. 12:12
https://www.acmicpc.net/problem/16956
16956번: 늑대와 양
크기가 R×C인 목장이 있고, 목장은 1×1 크기의 칸으로 나누어져 있다. 각각의 칸에는 비어있거나, 양 또는 늑대가 있다. 양은 이동하지 않고 위치를 지키고 있고, 늑대는 인접한 칸을 자유롭게 �
www.acmicpc.net
IDEA
※ 늑대의 상하좌우에 양이 있다면, 양을 지킬 수 없다.
(0,1) | ||
(1,0) | (1,1) | (1,2) |
(2,1) |
▷ 'W'의 좌표를 기준으로 상하좌우에 'S'가 있다면 0을 출력,
'.'이 있다면 울타리 'D'로 바꾼 후 1을 출력
▷ 상하좌우 좌표에 접근하기 위한 표
N | S | E | W | |
x | -1 | 1 | 0 | 0 |
y | 0 | 0 | 1 | -1 |
배열 동적 할당 (Dynamic allocation)
다음과 같이 배열 크기를 변수로 두는 것 가능
int* arr = new int[length]();
초기화
int *arr = new int[5] {1, 2, 3, 4, 5};
해제
dekete[] arr;
2차원 배열 동적 할당
가장 오른쪽 차원이 컴파일 타임 상수일 경우
int (*arr)[5] = new int[10][5];
아니라면
int** arr = new int*[10];
for(int count = 0; count < 10; ++count)
arr[count] = new int[5];
해제(할당한 반대 순서로 해제)
for(int count = 0; count < 10; ++count)
delete[] array[count];
delete[] array;
/*
날짜: 2020.08.03
번호: 16956
문제:
*/
#include <iostream>
using namespace std;
int main(void) {
int R, C; // 행, 열
cin >> R >> C;
bool protect = true; // 양을 지킬 수 있는지
char** farm = new char* [R];
for (int i = 0; i < R; ++i) {
farm[i] = new char[C];
}
/* 입력 */
for (int i = 0; i < R; ++i) {
for (int j = 0; j < C; ++j) {
cin >> farm[i][j];
}
}
// N S E W
int dx[4] = { -1, 1, 0, 0 };
int dy[4] = { 0, 0, 1, -1 };
int newX, newY;
for (int i = 0; i < R; ++i) {
for (int j = 0; j < C; ++j) {
/* 늑대의 사방에 양이 있다면 0출력 */
if (farm[i][j] == 'W') {
for (int k = 0; k < 4; ++k) {
newX = i + dx[k];
newY = j + dy[k];
if (-1 < newX && newX < R && -1 < newY && newY < C) {
if (farm[newX][newY] == 'S') {
protect = false;
}
else if (farm[newX][newY] == '.') {
farm[newX][newY] = 'D';
}
}
}
}
}
}
/* 결과 출력 */
cout << (int)protect << "\n";
for (int i = 0; i < R; ++i) {
for (int j = 0; j < C; ++j) {
cout << farm[i][j];
}
cout << "\n";
}
}