© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 6903 - Trident

2025-12-14
BOJ
브론즈 III
cpp
원본 문제 보기
구현

문제

BOJ 6903 - Trident

세 개의 파라미터 t, s, h를 입력받아 삼지창(trident) 모양의 아스키 아트를 출력한다.

  • t: 이빨(tine) 부분의 높이 (행 수)
  • s: 이빨 사이의 공백 수
  • h: 손잡이(handle) 부분의 높이 (행 수)

이빨 부분은 * 세 개가 s칸 공백으로 구분되고, 중간 연결 가로줄은 *가 연속으로 이어진다. 손잡이는 가운데 열에 *가 h개 출력된다.

입력

첫 번째 줄에 세 정수 t, s, h가 주어진다.

출력

삼지창 모양의 아스키 아트를 출력한다.

예제

입력출력
2 1 3* * * * * * ***** * * *

풀이

세 구역(이빨, 연결 가로줄, 손잡이)으로 나누어 각각 출력 규칙을 적용한다.

  1. 이빨 부분: t번 반복하여 *, s칸 공백, *, s칸 공백, * 순으로 출력한다.
  2. 연결 가로줄: 너비가 2*s+3인 * 연속 문자열을 한 줄 출력한다.
  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 생성에 사용되는 임시 버퍼 크기