728x90
반응형
SMALL
백준 문제 풀이: 5704 (팬그램)
문제 링크: https://www.acmicpc.net/problem/5704
문제 설명:
입력으로 주어진 문자열이 **팬그램**인지 확인하는 문제입니다. 팬그램은 알파벳 소문자 'a'부터 'z'까지 모든 문자를 최소 한 번씩 포함하는 문자열입니다. 입력의 끝은 '*'로 주어지며, 각 문자열이 팬그램인지 판별하고 결과를 출력합니다.
문제 해결 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
while (true) {
string s;
getline(cin, s);
if (s == "*") break; // 종료 조건
int arr[26] = {0}; // 알파벳 등장 여부를 저장하는 배열
int cnt = 0; // 고유 알파벳 개수
for (char c : s) {
if (c >= 'a' && c <= 'z') { // 소문자 알파벳만 체크
if (arr[c - 'a'] == 0) {
arr[c - 'a'] = 1; // 알파벳 등장 표시
cnt++;
}
}
}
// 알파벳 개수 확인
if (cnt == 26) {
cout << "Y\n"; // 팬그램인 경우
} else {
cout << "N\n"; // 팬그램이 아닌 경우
}
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- 핵심 알고리즘: 문자열을 순회하면서 각 알파벳의 등장 여부를 확인하고, 총 26개의 소문자가 등장했는지 판별합니다.
- 구현 세부사항:
arr[26]: 알파벳 등장 여부를 저장하는 배열입니다.- 문자열의 각 문자
c가 소문자 범위('a' ~ 'z')에 해당하는지 검사한 후, 등장 여부를 체크합니다. - 입력의 끝 조건은
"*"입니다.
- 시간 복잡도 분석:
- 각 문자열의 길이를
n이라고 할 때, 문자열을 한 번 순회하므로 O(n)입니다. - 모든 입력을 처리하는 시간 복잡도는 O(n × T) (T는 입력 문자열 수)입니다.
- 각 문자열의 길이를
결과
주어진 문자열이 팬그램인지 여부를 정확히 판별합니다.
- 팬그램인 경우: "Y"
- 팬그램이 아닌 경우: "N"
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
반응형
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
| 백준 11536번 [줄 세우기](C++) -yes6686- 티스토리 (0) | 2024.07.15 |
|---|---|
| 백준 14910번 [오르막](C++) -yes6686- 티스토리 (0) | 2024.07.15 |
| 백준 4447번 [좋은놈 나쁜놈](C++) -yes6686- 티스토리 (0) | 2024.07.15 |
| 백준 11586번 [지영 공주님의 마법 거울](C++) -yes6686- 티스토리 (0) | 2024.07.14 |
| 백준 3230번 [금메달, 은메달, 동메달은 누가?](C++) -yes6686- 티스토리 (0) | 2024.07.13 |