문제
T개의 테스트케이스가 주어진다. 각 테스트케이스는 행 수 N과 시작 문자 C로 구성된다. 1행에는 C를 1개, 2행에는 다음 문자를 2개, ... , N행에는 N개의 문자를 출력하여 삼각형 모양을 만든다. 문자는 Z 이후 다시 A로 순환한다.
입력
- 첫 번째 줄: 테스트케이스 수 T
- 이후 T줄: 행 수 N과 시작 문자 C
출력
- 각 테스트케이스마다 N행짜리 삼각형을 출력하고, 테스트케이스 사이에 빈 줄을 삽입한다.
예제
| 입력 | 출력 |
|---|---|
2 3 A 2 Z | A BB CCC `` Z AA |
풀이
T개의 테스트케이스에 대해 i번째 행에서 현재 문자를 i번 출력하고, 매 행마다 문자를 다음 알파벳으로 순환시킨다.
- T를 입력받고 T번 반복한다.
- 각 테스트케이스에서 N과 시작 문자 C를 입력받는다.
- 1행부터 N행까지 반복하며 현재 문자를 행 번호만큼 출력한다.
- 매 행 출력 후 문자를 증가시키고, Z를 초과하면 A로 되돌린다.
- 각 테스트케이스 출력 후 빈 줄을 출력한다.
핵심 아이디어: 문자 순환 처리를 c++; if (c > 'Z') c = 'A';로 간단히 구현한다. i번째 행에는 i개의 문자를 출력하므로 총 출력 문자 수는 N*(N+1)/2개이다.
코드
#include <iostream>
using namespace std;
int T, N;
char c;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while (T--)
{
cin >> N >> c;
for (int i = 1; i <= N; i++)
{
for (int j = 0; j < i; j++)
cout << c;
cout << '\n';
c++;
if (c > 'Z')
c = 'A';
}
cout << '\n';
}
}복잡도
- 시간: O(T * N²) — 테스트케이스마다 삼각형 출력 (총 N*(N+1)/2 문자)
- 공간: O(1) — 추가 자료구조 없음