728x90
SMALL
백준 문제 풀이: 10820 (문자열 분석)
문제 링크: https://www.acmicpc.net/problem/10820
문제 설명:
여러 줄의 문자열이 주어졌을 때, 각 줄에 대해 다음을 분석해야 합니다: 1. **소문자** 개수 2. **대문자** 개수 3. **숫자** 개수 4. **공백** 개수 입력은 EOF(End Of File)까지 주어지며, 각 줄에 대한 결과를 출력합니다.
문제 해결 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
string s;
// EOF까지 입력을 읽고 처리
while (getline(cin, s)) {
int smallLetterCnt = 0; // 소문자 개수
int bigLetterCnt = 0; // 대문자 개수
int numCnt = 0; // 숫자 개수
int gapCnt = 0; // 공백 개수
// 문자열의 각 문자 검사
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'A' && s[i] <= 'Z') { // 대문자
bigLetterCnt++;
}
else if (s[i] >= 'a' && s[i] <= 'z') { // 소문자
smallLetterCnt++;
}
else if (s[i] >= '0' && s[i] <= '9') { // 숫자
numCnt++;
}
else if (s[i] == ' ') { // 공백
gapCnt++;
}
}
// 각 줄의 결과 출력
cout << smallLetterCnt << ' ' << bigLetterCnt << ' ' << numCnt << ' ' << gapCnt << '\n';
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- 입력 처리:
-
getline(cin, s)
를 사용하여 한 줄씩 입력받습니다. - 문자열 분석:
각 문자를 순회하며 다음 조건에 따라 개수를 구합니다:
'A' <= s[i] <= 'Z'
: 대문자'a' <= s[i] <= 'z'
: 소문자'0' <= s[i] <= '9'
: 숫자s[i] == ' '
: 공백
- 출력: - 각 줄에 대해 소문자, 대문자, 숫자, 공백의 개수를 출력합니다.
시간 복잡도 분석
- 한 줄의 길이를
n
이라고 하면, 각 문자를 확인하는 데 **O(n)**의 시간이 걸립니다. - 여러 줄에 대해 처리하므로 전체 시간 복잡도는 **O(Total Input Size)**입니다.
결과
각 줄에 대해 소문자, 대문자, 숫자, 공백의 개수를 정확히 출력합니다.
- 입력 예시:
This is String SPACE 1 SPACE S a M p L e I n P u T 0L1A2S3T4L5I6N7E8
- 출력 예시:
10 2 0 2 0 10 1 8 6 6 0 12 0 8 9 0
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 문자열' 카테고리의 다른 글
백준 11575번 [Affine Cipher](C++) -yes6686- 티스토리 (0) | 2024.07.06 |
---|---|
백준 2495번 [연속구간](C++) -yes6686- 티스토리 (1) | 2024.06.30 |
백준 2789번 [유학 금지](C++) -yes6686- 티스토리 (0) | 2024.05.06 |
백준 1181번 [단어 정렬](C++)-yes6686- 티스토리 (1) | 2023.12.21 |
백준 5525번 [IOIOI](C++)-yes6686- 티스토리 (0) | 2023.12.21 |