© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

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

BOJ 5704 - 팬그램

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

문제

BOJ 5704 - 팬그램

팬그램(pangram)이란 알파벳 26자를 모두 포함하는 문장이다. 주어진 문자열이 팬그램인지 판별하여 Y 또는 N을 출력하는 문제다. *이 입력되면 종료한다.

입력

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

출력

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

예제

입력출력
The quick brown fox jumps over the lazy dogY
Hello WorldN
*(종료)

풀이

26비트 비트셋으로 알파벳 등장 여부를 추적하고, 모두 1이면 팬그램으로 판별한다.

  1. getline으로 한 줄씩 읽고, *이면 루프 종료
  2. bitset<26> seen을 선언하여 초기화
  3. 문자열 각 문자에 대해 알파벳이면 seen[c - 'a'] = 1 설정
  4. seen.all()이 true이면 Y, 아니면 N 출력

핵심 아이디어: bitset<26>을 사용하면 26개 알파벳의 등장 여부를 1비트씩 관리하고, .all()로 전체 등장 여부를 O(1)에 확인할 수 있다.

코드

#include <iostream>
#include <string>
#include <bitset>
 
using namespace std;
 
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  string s;
  while (getline(cin, s) && s != "*")
  {
    bitset<26> seen;
    for (char c : s)
      if (isalpha(c))
        seen[c - 'a'] = 1;
    cout << (seen.all() ? "Y" : "N") << "\n";
  }
 
  return 0;
}

복잡도

  • 시간: O(N) — 문자열 길이 N에 비례하여 순회
  • 공간: O(1) — bitset<26> 고정 크기 사용