© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

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

BOJ 5698 - Tautogram

2025-08-14
BOJ
브론즈 II
cpp
원본 문제 보기
구현
문자열
파싱

문제

BOJ 5698 - Tautogram

토토그램(tautogram)이란 모든 단어가 같은 알파벳으로 시작하는 문장이다. 입력된 한 줄의 문장이 토토그램인지 판별하여 Y 또는 N을 출력하는 문제다. *이 입력되면 종료한다.

입력

  • 한 줄씩 문장이 주어진다.
  • *이 입력되면 종료한다.

출력

  • 각 문장에 대해 토토그램이면 Y, 아니면 N을 출력한다.

예제

입력출력
Seventy Seven Sheep Safely GrazedN
Peter Piper Picked a PeckN
Big Brown Bears Bathe By Beaver BrookY
*(종료)

풀이

문장을 단어로 분리한 뒤 첫 번째 단어의 첫 글자(소문자 변환)와 모든 단어의 첫 글자를 비교한다.

  1. getline으로 한 줄 읽고, *이면 종료
  2. stringstream으로 공백 기준 단어 분리
  3. 첫 번째 단어의 첫 글자를 tolower로 소문자 변환하여 기준 문자 저장
  4. 나머지 모든 단어의 첫 글자를 소문자 변환 후 기준 문자와 비교
  5. 하나라도 다르면 N, 모두 같으면 Y 출력

핵심 아이디어: 대소문자를 tolower로 통일한 후 첫 글자만 비교하면 되므로, 단어 파싱 후 첫 글자 비교가 핵심이다.

코드

#include <iostream>
#include <vector>
#include <sstream>
#include <cctype>
 
using namespace std;
 
bool isTautogram(const string &line)
{
  vector<string> words;
  stringstream ss(line);
  string word;
 
  while (ss >> word)
  {
    words.push_back(word);
  }
 
  if (words.empty())
  {
    return false;
  }
 
  char first = tolower(words[0][0]);
 
  for (const auto &w : words)
  {
    if (tolower(w[0]) != first)
    {
      return false;
    }
  }
 
  return true;
}
 
int main()
{
  string line;
 
  while (true)
  {
    getline(cin, line);
    if (line == "*")
    {
      break;
    }
 
    if (isTautogram(line))
    {
      cout << "Y" << endl;
    }
    else
    {
      cout << "N" << endl;
    }
  }
 
  return 0;
}

복잡도

  • 시간: O(N) — 문장 내 전체 문자 수 N에 비례
  • 공간: O(W) — 단어 수 W만큼 벡터에 저장