문자열이 주어졌을 때, 이를 'X' 형태로 출력하는 프로그램을 만들어 보겠습니다. 아래 이미지를 참고하면 출력 결과를 쉽게 이해할 수 있습니다.
핵심 아이디어는 간단합니다. 하나의 변수(i)는 왼쪽에서 오른쪽 방향으로, 다른 변수(j)는 오른쪽에서 왼쪽 방향으로 대각선 위치를 추적하고, 세 번째 변수(k)는 각 행에서 공백과 문자를 구분하기 위해 사용됩니다.
알고리즘
START
Step 1 -> 함수 void print(string str, int len) 선언
Loop For int i = 0 and i < len and i++
Set int j = len-1- i
Loop For int k = 0 and k < len and k++
IF k == i || k == j
Print str[k]
End
Else
Print " "
End
End
Step 2 -> main() 함수에서
Declare string str = "tutorialpoint"
Set int len = str.size()
Call print(str, len)
STOP구현 예제
아래는 위 알고리즘을 C++로 구현한 전체 코드입니다.
#include<iostream>
using namespace std;
void print(string str, int len){
for (int i = 0; i < len; i++){
int j = len-1- i;
for (int k = 0; k < len; k++){
if (k == i || k == j)
cout << str[k];
else
cout << " ";
}
cout << endl;
}
}
int main (){
string str = "tutorialpoint";
int len = str.size();
print(str, len);
return 0;
}동작 원리
- 외부 루프의
i는 현재 출력 중인 행 번호를 나타냅니다. j = len - 1 - i는 각 행마다 오른쪽 대각선에 해당하는 열 위치를 계산합니다.- 내부 루프의
k가i또는j와 일치하면 해당 위치의 문자를 출력하고, 그렇지 않으면 공백을 출력합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 X자 형태의 출력 결과를 얻을 수 있습니다.
t t
u u
t t
o o
r r
i i
a a
l l
p p
o o
n
p p
o o
i i
n n
t t
s s
t t
u u
t t이처럼 두 개의 대각선 교차 패턴을 활용하면 별도의 복잡한 로직 없이도 간단한 이중 반복문만으로 X자 형태의 문자열 출력을 구현할 수 있습니다.