IT 프로그래밍/백준

[C++] 백준 10798 세로읽기

기술1 2024. 5. 22. 14:21
반응형

 

문제

 

 

 

코드

#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문을 걸어주는 것입니다. 
반응형