

하... 이 문제 꽤나 오래 걸렸다.
사실 아직 문제를 푸는 중인데 어떻게 풀어 나갈 지 대충 감은 오는데
코드 짜는 부분에서 막혀서 결국 구글링 해봤다.
코드는 보지 않고 살짝 글만 봤는데...
경비원이 없는 행과 열 중 더 큰 값을 출력하면 되는 것이였다.
나는 막 0행에 X(경비원) 하나도 없는지 찾고 없다면
0행에 1열도 확인, 2열도 확인... 그렇게 모두 찾아서
행과 열 중 더 큰 값을 출력하는 것으로 결론 지었다.
하나 하나씩 비교하지 않아도 되는 것이였다.
위 결론을 내리기까지에도 시간이 많이 소요 됐었다.
문제를 분석하는 능력이 아직 너무 부족한 것 같다.
아직이라기엔 한 것이 없긴 함...;
하.. 무튼 그래도 일단 내가 하려던 코드라도 보여주고 싶다.
아래가 바로 그 코드이다.
짜다 만 코드이다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main(void) {
int N, M, count = 0, guard = 0;
int empty[50] = { 0 }, n = 0;
char castle[50][50] = { 0 };
scanf("%d %d", &N, &M); // 성의 가로 크기 N, 세로 크기 M 입력 받기.
for (int i = 0; i < N; i++) {
for (int j = 0; j < M + 1; j++) { // 마지막은 널문자가 들어가기에 1을 더함.
scanf("%c", &castle[i][j]); // 성의 상태 입력 받기.
}
}
for (int i = 0; i < N; i++) { // 행의 개수만큼 for문 반복.
for (int j = 0; j < M; j++) { // 열의 개수만큼 for문 반복.
if (castle[i][j] == 'X') { // i행에 X가 들어 있다면
count++; // count 값을 증가 시킨다.
}
}
if (count == 0) { // 만일 count가 0. 즉, i행에 X(경비원)가 하나도 없을 경우.
empty[n] = i; // i행의 값을 배열에 추가.
n++; // 다음 i행의 값 저장을 위해 다음 인덱스로 이동.
}
else {
count = 0;
}
}
// 이제 열 비교....
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main(void) {
int N, M, countR = 0, countC = 0;
char castle[50][50] = { 0 };
scanf("%d %d", &N, &M); // 성의 가로 크기 N, 세로 크기 M 입력 받기.
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) { // 마지막은 널문자가 들어가기에 1을 더함.
scanf(" %c", &castle[i][j]); // 성의 상태 입력 받기.
}
}
for (int i = 0; i < N; i++) { // 행의 개수만큼 for문 반복.
int emptyCount = 0;
for (int j = 0; j < M; j++) { // 열의 개수만큼 for문 반복.
if (castle[i][j] != 'X') { // i행에 X가 들어 있다면
emptyCount++; // count 값을 증가 시킨다.
}
}
if (emptyCount == M) { 경비원이 하나도 없다면
countR++; // 경비원이 없는 행 수 추가.
}
}
for (int i = 0; i < M; i++) { // 열의 개수만큼 for문 반복.
int emptyCount = 0;
for (int j = 0; j < N; j++) { // 열의 개수만큼 for문 반복.
if (castle[j][i] != 'X') { // i열에 X가 들어 있다면
emptyCount++; // count 값을 증가 시킨다.
}
else {
break;
}
}
if (emptyCount == N) { // 경비원이 하나도 없다면
countC++; // 경비원이 없는 열 수 추가.
}
}
if (countR < countC) { 행과 열 중 큰 값 출력 하기
printf("%d", countC);
}
else {
printf("%d", countR);
}
return 0;
}
scanf 함수는 서식 지정자에 따라 입력을 처리하는데, %c 서식 지정자를 사용할 때 문자를 입력받는 동안 공백 문자(스페이스, 탭, 개행 등)을 무시하지 않음. 따라서 %c로 문자를 입력받을 때 입력 스트림에 남아있는 공백 문자(보통 개행 문자)도 문자로 처리될 수 있음!!!
예를 들어, 사용자가 "A"를 입력하고 Enter 키를 누르면 실제로 입력 스트림에는 "A\n"이 남게 됨. %c를 사용하면 개행 문자('\n')도 문자로 간주되어 변수에 저장 된단다...
아오 참.... 이 쉬운 문제를 어렵게 접근해서 오래 걸리기도 했지만
생각보다 얼척 없는 곳에서 문제가 발생한다..
하지만 이 얼척 없다고 느껴지는 간단한 문제가
다 성장하는 과정 속의 나뭇가지일 뿐이겠지..!!!!!!!
아자 아자 화이팅.....