반응형
#include <iostream>
using namespace std;
int dx[] = { 0,1,0,-1 };
int dy[] = { -1,0,1,0 };
char map[101][101];
bool copymap[101][101] = { false };
int normal=0;//정상
int notnormal=0;//색맹
int n;//정사각형
int temp = 0;
void start(int x, int y, char map[101][101])
{
if (copymap[y][x] == true) return;
copymap[y][x] = true;
for (int i = 0; i < 4; i++)
{
if (x + dx[i] > n - 1 || x + dx[i]<0 || y + dy[i]>n - 1 || y + dy[i] < 0)
{
continue;
}
else
{
if (map[y][x] == map[y + dy[i]][x + dx[i]]&©map[y+dy[i]][x+dx[i]]==false)//다음 좌표랑 같을시에 + 방문x
{
temp++;
start(x + dx[i], y + dy[i], map);//xy좌표 변경 재귀
}
}
}
normal++;
}
void start2(int x, int y, char map[101][101])
{
if (copymap[y][x] == true) return;
copymap[y][x] = true;
for (int i = 0; i < 4; i++)
{
if (x + dx[i] > n - 1 || x + dx[i]<0 || y + dy[i]>n - 1 || y + dy[i] < 0)
{
continue;
}
else
{
if ((map[y][x] == map[y + dy[i]][x + dx[i]] && copymap[y + dy[i]][x + dx[i]] == false)||((map[y][x] == 'R'&&map[y+dy[i]][x+dx[i]]=='G') && copymap[y + dy[i]][x + dx[i]] == false) || ((map[y][x] == 'G' && map[y + dy[i]][x + dx[i]] == 'R') && copymap[y + dy[i]][x + dx[i]] == false))//다음 좌표랑 같을시에 + 방문x
{
temp++;
start2(x + dx[i], y + dy[i], map);//xy좌표 변경 재귀
}
}
}
notnormal++;
}
void reset(char copymap[101][101])
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
copymap[i][j] = false;
}
}
//복사
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> map[i][j];
}
}
//입력 완료
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
start(j, i, map);
normal -= temp;
temp = 0;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
copymap[i][j] = false;
}
}//초기화
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
start2(j, i, map);
notnormal -= temp;
temp = 0;
}
}
cout <<normal<<" "<<notnormal;
}
기본적으로 너비우선 탐색을 사용하여 풀 수도 있겠지만 visit을 대체하는 boolean 타입의 배열을 만들어 깊이 우선탐색을 채택하였다.
적록색약이 아닌 함수와, 적록색약의 경우로 나누어 풀었는데
다 풀고 다시 한번 생각해 보니 입력을 받을때 각기 다른 배열에 처음부터
1.정상-->그대로 입력
2.적록색약-->R,G를 통일하여 R이든 G든 입력
하였으면, 함수를 재활용 할 수 있지 않았을까 싶었다.
반응형
'백준(알고리즘)' 카테고리의 다른 글
백준 1764 듣보잡 (0) | 2021.01.02 |
---|---|
백준 2458 키순서 (0) | 2020.12.30 |
백준 11722 가장 긴 감소하는 부분순열 (0) | 2020.12.26 |
백준 11399 ATM (0) | 2020.12.26 |
백준 14697 방 배정하기 (0) | 2020.12.26 |