소스코드

#include <stdio.h>

int main(){
	int a, b, i, j;
	scanf("%d %d", &a, &b);
	char castle[a][b];
	
	for (i=0; i<a; i++){
		scanf("%s", castle[i]);
	}
	
	int row = 0;
	int col = 0;
	int temp;
	
	for (i=0; i<a; i++){
		temp = 0; 
		for(j=0; j<b; j++){
			if (castle[i][j] == 'X') {
				temp++;
			}
		}
		if (temp == 0) row++;
	}
	
	for (i=0; i<b; i++){
		temp = 0; 
		for(j=0; j<a; j++){
			if (castle[j][i] == 'X') {
				temp++;
			}
		}
		if (temp == 0) col++;
	}
	
	if (row<col) printf("%d", col);
	else printf("%d", row);	
}

해설

요즘 코딩하면서 느낀 점이.. 진짜한참더늘어야된다는거랑 생각한 것을 구현할 때에 코드의 순서와 위치가 매우매우 중요하다는 거..

이 문제도 코드 위치를 잘못 짜서 한참 돌아왔다. 문자열 받는 게 잘못된 건 줄 알고.. 

경비원이 'X'로 표시되어 있으니까, 경비원이 한 명도 없는 행/열 개수를 저장하고, 둘 중에 큰 것을 출력하면 최소로 필요한 경비원의 수가 된다. 이 발상은 괜찮았는데.. 구현이 오래 걸렸다.

 

	for (i=0; i<a; i++){
		temp = 0; 
		for(j=0; j<b; j++){
			if (castle[i][j] == 'X') {
				temp++;
			}
		}
		if (temp == 0) row++;
	}

경비원이 하나도 없는 행의 개수를 구하는 부분이다. temp = 0;의 위치를 잘못 넣어서 계속 틀리게 나왔다....

첫번째 for문에서는 행을 지정하고, 두번째 for문에서는 그 행의 요소 하나하나를 'X'와 비교하여 'X'가 맞으면 temp에 하나를 더하고, 아니면 그냥 넘어가는 식으로 코드를 짠 뒤 마지막에 temp가 0일 경우 (=row에 X가 하나도 없을 경우) row에 1을 더하는 방식으로 코드를 짰다. 

temp = 0; 를 두 번째 for문 안에 넣어두고 뭐가 틀렸는지 한참 찾았다..........

그렇게 해두면 요소 하나하나를 비교하고 temp가 초기화되니 당연히 이상하게 나온다. 

복사했습니다!