embarass   6년 전

먼저 입력n크기의 nxn행렬을 만들고

대칭성을 이용해 문제를 해결하려 했습니다.

행렬의 대칭축을 찾는과정에서 홀수와 짝수인경우를 나누어 생각해보았고

이과정에서 두 경우 모두 i번째행에서 v - j열의 원소를 *로 바꿔주면 된다는 결론이 나와서

이대로 코드를 구현했습니다. 

제출하면 틀린코드라고 나오는데 혹시 어디가 잘못됬는지 알려주시면 감사하겠습니다.

djm03178   6년 전

각 줄을 출력한 후에 불필요한 문자가 출력되면 안 됩니다. 이 경우 a 배열이 처음에 첫번째 원소를 제외하고 모두 0값, 즉 널 문자로 초기화되므로, 매 줄마다 불필요한 널 문자가 MAX - n개만큼 출력됩니다.

embarass   6년 전

void print(){
 for (int i = 1; i <= n; i++){
  for (int j = 1; j <= n; j++)
   printf("%c", a[i][j]);
  printf("\n");
 }
}

매 줄 마다 n개의 원소만 출력하고 있는것 아닌가요?

djm03178   6년 전

제가 정신이 없나 보네요. 지금 컴파일러가 맛이 가서 컴파일 없이 눈으로만 보다 보니 실수하네요.

다시 읽어보니, 문제가 되는 부분은 이거네요.

char a[MAX][MAX] = { ' ', };

이렇게 초기화를 했는데, 이 경우 a는 첫 번째 원소만 공백 문자고 나머지는 널 문자로 초기화됩니다.

어떤 환경에서는 널 문자를 출력하면 마치 공백 문자인 것처럼 똑같이 출력이 되는데, 공백 문자와 널 문자는 서로 전혀 다른 문자입니다.

따라서 print 함수에서 공백 문자가 와야 할 자리에 공백 문자가 아닌 널 문자를 출력하니, 오답이 됩니다.

embarass   6년 전

답변 너무 감사합니다

댓글을 작성하려면 로그인해야 합니다.