개요
이 튜토리얼에서는 C++을 사용하여 문자열을 문자의 정사각형 행렬 그리드 형태로 변환하는 프로그램을 다룹니다.
문자열이 입력으로 주어지면, 해당 문자열을 지정된 행과 열 개수를 가진 행렬 그리드 형식으로 출력하는 것이 우리의 목표입니다.
동작 원리
변환 과정은 다음과 같은 단계로 진행됩니다.
1. 문자열 길이의 제곱근을 기준으로 행(row)과 열(column)의 크기를 계산합니다. 행에는 내림(floor), 열에는 올림(ceil)을 적용합니다.
2. 행 × 열의 값이 문자열 길이보다 작으면, 행의 크기를 열과 동일하게 조정하여 모든 문자를 담을 수 있도록 합니다.
3. 2차원 문자 배열에 문자열의 문자들을 순서대로 채워 넣습니다.
4. 완성된 그리드를 행 단위로 출력합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 문자열을 그리드 형식으로 변환
void convert_grid(string str){
int l = str.length();
int k = 0, row, column;
row = floor(sqrt(l));
column = ceil(sqrt(l));
if (row * column < l)
row = column;
char s[row][column];
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
s[i][j] = str[k];
k++;
}
}
// 새로운 그리드 출력
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
if (s[i][j] == '\0')
break;
cout << s[i][j];
}
cout << endl;
}
}
int main(){
string str = "TUTORIALSPOINT";
convert_grid(str);
return 0;
}
출력 결과
TUTO
RIAL
SPOI
NT
코드 설명
위 예제에서 문자열 "TUTORIALSPOINT"의 길이는 14입니다. sqrt(14)의 내림값은 3, 올림값은 4이므로 처음에는 3행 4열로 계산됩니다. 그러나 3 × 4 = 12로 문자열 길이 14보다 작기 때문에 행의 크기가 4로 조정되어 최종적으로 4행 4열 그리드가 생성됩니다.
이후 문자열의 문자들이 왼쪽에서 오른쪽으로, 위에서 아래로 순서대로 2차원 배열에 채워집니다. 마지막 행에서는 남는 공간이 null 문자(\0)로 처리되어, 출력 과정에서 해당 위치를 만나면 자동으로 건너뛰게 됩니다. 그 결과 문자열이 깔끔한 정사각형 그리드 형태로 출력되는 것을 확인할 수 있습니다.