숫자 n이 주어졌을 때, n줄에 걸쳐 무표정 얼굴(Expressionless Face) 패턴을 생성하고 결과를 출력하는 것이 이번 문제의 목표입니다. 무표정 얼굴은 특수 문자를 조합하여 표현하며, 완성된 모습은 "*_*"처럼 보입니다. 별(*)과 밑줄(_)을 규칙적으로 배치하면 마치 눈과 입이 없는 얼굴을 연상시키는 대칭형 패턴이 만들어집니다.
예시
입력-: n = 6 출력-:

입력-: n = 8 출력-:

알고리즘
패턴 출력 로직은 두 개의 함수로 나누어 구현합니다. 하나는 별을 반복 출력하는 보조 함수이고, 다른 하나는 전체 패턴의 각 행을 구성하는 메인 함수입니다.
시작
1단계 -> print_stars(int i) 함수
j = 1부터 j <= i까지 반복하며 "*" 출력
2단계 -> print_pattern(int rows) 함수
i = 1부터 i <= rows까지 반복
print_stars(i) 호출
"_" 출력
print_stars(rows - i + 1) 호출
"_" 출력
print_stars(rows - i + 1) 호출
"_" 출력
print_stars(i) 호출
줄바꿈 출력
3단계 -> int main() 함수
rows를 선언하고 8로 설정
print_pattern(rows) 호출
종료
C++ 코드 예제
#include <bits/stdc++.h>
using namespace std;
// 별을 출력하는 함수
void print_stars(int i) {
for (int j = 1; j <= i; j++)
cout << "*";
}
void print_pattern(int rows) {
for (int i = 1; i <= rows; i++) {
print_stars(i);
cout << "_";
print_stars(rows - i + 1);
cout << "_";
print_stars(rows - i + 1);
cout << "_";
print_stars(i);
cout << endl;
}
}
int main() {
int rows = 8;
print_pattern(rows);
return 0;
}
출력 결과

패턴 구조 살펴보기
각 행은 네 개의 별 그룹과 세 개의 밑줄로 구성되며, 구체적인 규칙은 다음과 같습니다.
- 첫 번째·마지막 그룹: 행 번호(i)와 같은 개수의 별을 출력하므로 아래로 내려갈수록 점점 길어집니다.
- 가운데 두 그룹: (rows − i + 1)개의 별을 출력하므로 아래로 내려갈수록 점점 짧아집니다.
- 구분자: 각 별 그룹 사이에는 밑줄(_)이 위치해 얼굴의 윤곽 역할을 합니다.
이처럼 좌우가 대칭을 이루면서 중앙 부분이 점차 좁아지는 구조 덕분에, 전체 출력 결과가 독특한 무표정 얼굴 모양으로 완성됩니다. 시간 복잡도는 행 수와 열 수에 비례하므로 O(n²)입니다.