10026-적록색약 acmicpc.net/problem/10026


DFS를 활용한 기초문제


dfs함수 안에서 조건문의 값 크기를 잘 설정하자.


저기서 x, y 조건을 약간 잘못걸어서 에러를 찾지 못하고 오래동안 헤맸음.

#include<stdio.h> #include<string.h> #include<stdlib.h> int arr[1000][1000]; int visit[1000][1000]; int result = 0; int n = 0; void dfs(int i, int j) { int x,y,k; int dx[4] = {0,1,0,-1}; int dy[4] = {1,0,-1,0}; for(k=0; k<4; k++) { x = i + dx[k]; y = j + dy[k]; if( x<0 || y<0 || x>n-1 || y>n-1) continue; if(visit[x][y] == 0 && arr[i][j] == arr[x][y]) { //printf("Log i,j,x,y : %d %d %d %d\n", i,j,x,y); //printf("Log 좌표값 : %d %d\n", arr[i][j], arr[x][y]); //printf("Log visit값 : %d %d\n\n\n", visit[i][j], visit[x][y]); visit[x][y] = 1; dfs(x,y); } } } int main(void) { int i, j; char str[1000]; memset(visit,0,sizeof(visit)); memset(arr,0,sizeof(arr)); scanf("%d", &n); fflush(stdin); for(i=0; i<n; i++) { scanf("%s", str); fflush(stdin); for(j=0; j<n; j++) { if(str[j] == 'R') { arr[i][j] = 2; } else if(str[j] == 'B') { arr[i][j] = 1; } } } //일반인 for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(visit[i][j] == 0) { dfs(i, j); result ++; } } } printf("%d ", result); //장애인 memset(visit,0,sizeof(visit)); for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(arr[i][j] == 2) { arr[i][j] = 0; } } } result = 0; for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(visit[i][j] == 0) { visit[i][j] = 1; dfs(i, j); result ++; } } } printf("%d\n", result); return 0; }



+ Recent posts