문제
세 개의 파라미터 t, s, h를 입력받아 삼지창(trident) 모양의 아스키 아트를 출력한다.
- t: 이빨(tine) 부분의 높이 (행 수)
- s: 이빨 사이의 공백 수
- h: 손잡이(handle) 부분의 높이 (행 수)
이빨 부분은 * 세 개가 s칸 공백으로 구분되고, 중간 연결 가로줄은 *가 연속으로 이어진다. 손잡이는 가운데 열에 *가 h개 출력된다.
입력
첫 번째 줄에 세 정수 t, s, h가 주어진다.
출력
삼지창 모양의 아스키 아트를 출력한다.
예제
| 입력 | 출력 |
|---|---|
2 1 3 | * * * * * * ***** * * * |
풀이
세 구역(이빨, 연결 가로줄, 손잡이)으로 나누어 각각 출력 규칙을 적용한다.
- 이빨 부분: t번 반복하여
*, s칸 공백,*, s칸 공백,*순으로 출력한다. - 연결 가로줄: 너비가
2*s+3인*연속 문자열을 한 줄 출력한다. - 손잡이: h번 반복하여
s+1칸 공백 후*를 출력한다.
핵심 아이디어: string(n, c) 생성자로 반복 문자열을 간결하게 만들 수 있다. 손잡이의 들여쓰기는 s+1칸으로, 세 이빨 중 가운데 *의 위치(1 + s + 1 = s+2번째 열, 0-indexed로 s+1)와 일치한다.
코드
#include <iostream>
using namespace std;
int main()
{
cin.tie(nullptr);
cout.tie(nullptr);
ios_base::sync_with_stdio(false);
int t, s, h;
cin >> t >> s >> h;
for (int i = 0; i < t; ++i)
{
cout << '*' << string(s, ' ') << '*' << string(s, ' ') << '*';
cout << '\n';
}
cout << string(2 * s + 3, '*') << '\n';
for (int i = 0; i < h; ++i)
{
cout << string(s + 1, ' ') << '*' << '\n';
}
}복잡도
- 시간: O(t + h + s) — 각 구역을 한 번씩 순회
- 공간: O(s) — string 생성에 사용되는 임시 버퍼 크기