728x90
SMALL
백준 문제 풀이: 10384번 [팬그램]
문제 링크: https://www.acmicpc.net/problem/10384
문제 설명:
주어진 문장이 팬그램인지 확인하는 문제입니다. 팬그램은 알파벳 26개가 모두 등장하는 문장을 말합니다. 또한, 각 알파벳이 2번 이상 등장하면 "Double pangram!!", 3번 이상 등장하면 "Triple pangram!!!"으로 분류됩니다. 문장이 팬그램이 아닌 경우에는 "Not a pangram"을 출력해야 합니다.
문제 해결 코드
#include <iostream>
#include <string>
#include <cstring> // memset 사용
using namespace std;
int alpha[26]; // 알파벳 등장 횟수 저장
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n; // 테스트 케이스 수 입력
cin.ignore(); // 버퍼 비우기
for (int i = 0; i < n; i++) {
string s;
getline(cin, s); // 문장 입력
// 알파벳 등장 횟수 계산
for (int j = 0; j < s.size(); j++) {
if (s[j] >= 'a' && s[j] <= 'z') {
alpha[s[j] - 'a']++;
} else if (s[j] >= 'A' && s[j] <= 'Z') {
alpha[s[j] - 'A']++;
}
}
// 팬그램 종류 판별
bool isTriple = true;
bool isDouble = true;
bool isPangram = true;
for (int i = 0; i < 26; i++) {
if (alpha[i] < 3) isTriple = false;
if (alpha[i] < 2) isDouble = false;
if (alpha[i] < 1) isPangram = false;
}
// 결과 출력
cout << "Case " << i + 1 << ": ";
if (isTriple) {
cout << "Triple pangram!!!" << '\n';
} else if (isDouble) {
cout << "Double pangram!!" << '\n';
} else if (isPangram) {
cout << "Pangram!" << '\n';
} else {
cout << "Not a pangram" << '\n';
}
// 알파벳 배열 초기화
memset(alpha, 0, sizeof(alpha));
}
}
코드 설명
위 코드는 주어진 문장이 팬그램인지 판별하고, 팬그램 종류를 출력합니다. 주요 로직은 다음과 같습니다:
- 입력 처리: 테스트 케이스 수를 입력받고, 각 문장을 처리합니다.
- 알파벳 등장 횟수 계산: 소문자와 대문자를 모두 처리하여 각 알파벳의 등장 횟수를 계산합니다.
- 팬그램 판별: 각 알파벳의 등장 횟수를 기준으로 Triple, Double, 일반 팬그램 여부를 확인합니다.
- 결과 출력: 각 테스트 케이스에 대해 결과를 출력한 뒤, 등장 횟수 배열을 초기화합니다.
시간 복잡도:
- 각 테스트 케이스마다 O(L) (문장의 길이)로 알파벳 등장 횟수를 계산합니다.
- 전체 복잡도는 O(N × L)이며, N은 테스트 케이스 수, L은 문장의 평균 길이입니다.
결과
위 코드를 통해 문제를 해결할 수 있으며, 팬그램 여부와 종류를 정확히 판별합니다. 다른 접근 방식이나 최적화가 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 16918번 [봄버맨](C++) -yes6686- 티스토리 (0) | 2024.11.17 |
---|---|
백준 1940번 [주몽](C++) -yes6686- 티스토리 (0) | 2024.11.15 |
백준 10570번 [Favorite Number](C++) -yes6686- 티스토리 (0) | 2024.11.13 |
백준 11441번 [합 구하기](C++) -yes6686- 티스토리 (0) | 2024.11.10 |
백준 2535번 [아시아 정보올림피아드](C++) -yes6686- 티스토리 (0) | 2024.11.08 |