문제 개요
문자열 str이 주어졌을 때, 이 문자열을 행렬 위에 '+' 패턴 형태로 출력해야 합니다. 행렬에 플러스 패턴을 만들려면 해당 행렬은 반드시 정사각 행렬이어야 하며, 정사각 행렬이란 행과 열의 개수가 같은 행렬을 의미합니다.
예를 들어 문자열 "Tutor"가 주어진 경우, 문자열이 중앙에서 가로 방향과 세로 방향으로 서로 교차하도록 배치하고, 행렬의 나머지 칸은 아래 그림과 같이 모두 'x'로 채우는 것이 목표입니다.

입력
str[] = {"Point"}출력

입력
str[] = {"this"}출력
Pattern not possible
짝수 길이 문자열이 안 되는 이유
홀수 길이의 문자열은 정확히 하나의 가운데 문자가 존재하여 가로줄과 세로줄이 한 지점에서 자연스럽게 교차할 수 있습니다. 반면 길이가 짝수인 문자열은 중앙에 해당하는 단일 위치가 없기 때문에 '+' 패턴을 만드는 것이 불가능합니다.
문제 해결 접근 방식
- 입력 문자열을 받습니다.
- 입력 문자열의 길이가 짝수인지 검사합니다. 짝수라면 패턴 생성이 불가능합니다.
- 처음에 행렬 전체를 'x'로 초기화합니다.
- 문자열을 중간 행과 중간 열에 배치하여 십자 모양을 만듭니다.
- 완성된 결과 행렬을 출력합니다.
알고리즘
시작
함수 int stringcross(char str[], int n)
단계 1 → 만약 n % 2 == 0이라면,
단계 2 → "Pattern not possible" 출력
단계 3 → 아니라면
2차원 문자 배열 str2[max][max] 선언
m을 선언하고 n / 2로 설정 (중앙 인덱스)
i = 0 ~ n-1, j = 0 ~ n-1 이중 반복
str2[i][j]를 'x'로 설정
i = 0 ~ n-1 반복
str2[i][m]을 str[i]로 설정 (중간 열)
i = 0 ~ n-1 반복
str2[m][i]를 str[i]로 설정 (중간 행)
i = 0 ~ n-1, j = 0 ~ n-1 이중 반복
str2[i][j] 출력 후 각 행마다 줄바꿈
함수 int main()
단계 1 → str[]을 "TUTOR"로 선언 및 초기화
단계 2 → n을 문자열 크기로 선언 및 초기화
단계 3 → stringcross(str, n-1) 호출
종료예제 코드
#include <stdio.h>
#define max 100
int stringcross(char str[], int n){
if (n % 2 == 0){
// 홀수 길이의 문자열만 패턴 생성 가능
printf("Pattern not possible\n");
}
else {
// 2차원 문자 배열 선언
char str2[max][max];
int m = n / 2;
// 모든 요소를 처음에 'x'로 설정
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
str2[i][j] = 'x';
}
}
// 십자 모양이 되도록 문자열 배치
for (int i = 0; i < n; i++){
// 중간 열에 문자 배치
str2[i][m] = str[i];
}
for (int i = 0; i < n; i++){
// 중간 행에 문자 배치
str2[m][i] = str[i];
}
// 결과 출력
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%c ",str2[i][j]);
}
printf("\n");
}
}
return 0;
}
int main(){
char str[] = {"TUTOR"};
int n = sizeof(str)/sizeof(str[0]);
stringcross(str, n-1);
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
x x T x x x x U x x T U T O R x x O x x x x R x x
문자열 "TUTOR"의 각 문자가 중앙 행과 중앙 열에 배치되어 두 문자열이 중앙에서 교차하는 '+' 패턴이 완성되고, 나머지 칸은 모두 'x'로 채워진 것을 확인할 수 있습니다.
복잡도 분석
행렬 초기화와 출력 과정에서 n×n 크기의 행렬 전체를 순회하므로 시간 복잡도는 O(n²)이며, n×n 크기의 2차원 배열을 사용하므로 공간 복잡도 역시 O(n²)입니다.