문제 풀이 의도
1. 먼저 문자를 입력받아 각 문자마다 5자리 이진수로 바꿉니다.
(이렇게 전체 문자를 바이너리로 변환한 배열로 바꾸었습니다.)
2. 전체 바이너리 1차원 배열을 주어진 행과 열의 수에 맞춰
시계 방향으로 돌아가면서 하나하나 넣어줍니다.
3. 다 만들어진 배열들을 행 기준으로 모두 출력합니다.
이 코드에서 뭔가 메모리 참조 오류가 난거 같은데 아무리 찾아봐도 보이지가 않습니다 ㅠㅠ
#include <stdio.h>
#include <string.h>
char str[100];
int arr[50][50];
int row, col;
void printArr(int itx) //시계방향 만들어진 행렬을 행 기준으로
//모두 출력
{
int i, j;
printf("%d ", itx + 1);
for(i = 0; i < row; i++)
{
for(j = 0; j < col; j++)
printf("%d", arr[i][j]);
}
printf("\n");
}
void init(void) //배열 초기화
{
int i, j;
for(i = 0; i < 50; i++)
{
for(j = 0; j < 50; j++)
arr[i][j] = 0;
}
}
void encoding(void) //문자열을 바이너리로 바꿔 배열에 저장
{
int flag = 0;
int temp[500];
char temp2[100];
int cnt = 0;
int cnt2 = 0;
int num;
int strSize;
int i, j;
int diff = 1;
int diff2 = 1;
strSize = strlen(str);
for(i = 0; i < strSize; i++)
{
if(i == 0)
continue;
if(str[i] == '\n')
{
continue;
}
temp2[cnt2++] = str[i];
}
temp2[cnt2] = '\0';
strSize = strlen(temp2);
for(i = 0; i < strSize; i++)
{
if(temp2[i] == ' ')
num = 0;
else
num = (int)temp2[i] - 64;
cnt = 0;
for(j = 0; j < 5; j++)
{
temp[5 * (i + 1) - cnt - 1] = num % 2;
cnt++;
num /= 2;
}
}
cnt = 0;
for(i = 0; i < col; i++)
{
arr[0][i] = temp[cnt++];
if(cnt == strSize * 5)
{
flag = 1;
break;
}
}
while(1)
{
if(flag == 1)
break;
for(i = 0; i < row - diff; i++)
{
arr[i + diff2][col - diff2] = temp[cnt++];
if(cnt == strSize * 5)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
for(i = 0; i < col - diff; i++)
{
arr[row - diff2][col - i - 1 - diff2] = temp[cnt++];
if(cnt == strSize * 5)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
diff++;
for(i = 0; i < row - diff; i++)
{
arr[row - i - 1 - diff2][diff2 - 1] = temp[cnt++];
if(cnt == strSize * 5)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
for(i = 0; i < col - diff; i++)
{
arr[diff2][diff2 + i] = temp[cnt++];
if(cnt == strSize * 5)
{
flag = 1;
break;
}
}
if(flag == 1)
break;
diff++;
diff2++;
}
}
int main(void)
{
int testcase;
int itx;
int i;
scanf("%d", &testcase);
for(itx = 0; itx < testcase; itx++)
{
init();
scanf("%d %d", &row, &col);
gets(str);
encoding();
printArr(itx);
}
return 0;
}
~~~
어떤 부분이 문제인지 도와주시면 정말 감사하겠습니다 ㅠㅠ
11년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
ntinamu
[[problem:ENCODING]]
문제 풀이 의도
1. 먼저 문자를 입력받아 각 문자마다 5자리 이진수로 바꿉니다.
(이렇게 전체 문자를 바이너리로 변환한 배열로 바꾸었습니다.)
2. 전체 바이너리 1차원 배열을 주어진 행과 열의 수에 맞춰
시계 방향으로 돌아가면서 하나하나 넣어줍니다.
3. 다 만들어진 배열들을 행 기준으로 모두 출력합니다.
이 코드에서 뭔가 메모리 참조 오류가 난거 같은데 아무리 찾아봐도 보이지가 않습니다 ㅠㅠ
11년 전