반응형
문제
코드
#include <iostream>
using namespace std;
char a[5][16];
int main()
{
for (int i = 0; i < 5; i++)
{
cin >> a[i];
}
for (int i = 0; i < 15; i++)
{
for (int k = 0; k < 5; k++)
{
if (a[k][i] != '\0')
cout << a[k][i];
}
}
return 0;
}
해설
* 배열에서 유효한 문자만 출력할 것
여기에서 다른 부분은 읽어보면서 대충 어떤 느낌으로 풀어야할지 감이 잡힐 것입니다. 여기서 놓치기 쉬운 부분은 바로 if(a[k][i] != '\0') 이 부분인데요. 유효한 데이터가 아닐 때 출력하지 안ㅇㅎ기 위해 '\0'을 해주어야 합니다. 이 조거니 없다면 쓰레기 값이 출력이 될 수 있습니다.
만약 예제가
ABCDE
123
XYZ
HELLO
WORLD
이렇게 주어진다면 이것을 세로로 해서 출력을 하라는 문제입니다. 저희가 이것을 각각 char a[0], a[1], a[2]. a[3]. a[4]에 넣는다면
a[0] = A B C D E \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
a[1] = 1 2 3 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
a[2] = X Y Z \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
a[3] = H E L L O \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
a[4] = W O R L D \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
이런식으로 배열에 저장이 되게 됩니다.
그 다음 2차원 배열 a의 크기는 a[5][16]으로 정의되어 있기 때문에 각 문자열은 최대 15까지를 저장할 수 있으며 마지막 문자는 '\0' 으로 채워져 있습니다.
따라서 이것을 세로로 출력을 해주어야 하기 때문에 a[0][0] a[1][0] a[2]0] ... 계속해서 출력을 해주는 이중 for문을 만들어주면 계산은 끝나게 됩니다.
유효한 문자만 출력하기 위해서
'\0' 이 나오는 그 이후의 값은 쓰레기 값이기 때문에 '\0' 이 아닐 때 출력을 해주는 IF문을 걸어주는 것입니다.
반응형
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[c++] 2139번 나는 너가 살아온 날을 알고 있다. (0) | 2024.05.24 |
---|---|
[c++] 백준 2563번 색종이 (0) | 2024.05.22 |
[c++] 백준 2738번 : 행렬 덧셈 (0) | 2024.05.21 |
[C++] 25206번 너의 평점은 (0) | 2024.05.21 |
[c++]백준 1076번 저항 (0) | 2024.05.19 |