5줄의 문장을 받고 이를 세로로 출력하시오.
EX)
A A B C D D
a f z z
0 9 1 2 1
a 8 E W g 6
P 5 h 3 k x
Aa0aPAf985Bz1EhCz2W3D1gkD6x
일단 알고리즘을 생각해봤다.
입력을 받을 때는 반복문을 사용해 가로를 정의하고 (총 5줄) 각 줄의 요소는 이중 반복문으로 받는다.
그리고 출력할 때는 반대로 세로를 먼저 정의하고 가로는 이중 반복문으로 표현하면 된다. 여기서 걸림돌이 되는 것은 각 문장의 길이가 다르게 되면 빈칸이 생길 수 있다는 것인데 이건 if문과 continue을 사용해서 해결하면 된다.
그리고 시행착오를 거치다가 다음과 같은 코드를 완성했다.
#include<stdio.h>
#define MAX 15//최대 15자의 문장이다.
int main(void) {
char input[5][MAX];//char input[5][MAX]={0};로 초기화 해줘야 함
for (int i = 0; i < 5; i++)
{
scanf("%s", input[i]);//문장을 입력받으므로 이중 반복문일 필요가 없음
}
for (int j = 0; j < MAX; j++) {
for (int i = 0; i < 5; i++) {
if (input[i][j] == NULL) {//만약 빈칸이라면 출력하지 않고 지나간다.
continue;
}
else {
printf("%c", input[i][j]);
}
}
}
return 0;
}
그런데 이게 오답처리가 되었다.
다시 replit으로 돌려보니까 배열을 초기화해주지 않아서 쓰레기값 몇개가 묻어나왔다. 초기화하니 정답 처리가 되었다. 기본이 중요하다는 걸 새삼 깨닫는다.
일단 초반에 알고리즘 구조는 잘 만든 것 같다. 그러나 배열 초기화라는 기본적인 걸 기억하지 못한 것은 조금 아쉬운 부분이다. 점점 지식을 쌓을수록 기본에 충실해야 하는데 이번에는 아쉽게도 그렇게 하지 못했다. 일단 2차원 배열까지만 문제를 풀고 다시 처음 문제를 돌아보면서 복습하는 시간이 필요할 것 같다.