728x90
- 문제 사이트: https://www.acmicpc.net/problem/10820
한 줄씩 입력 받고 입력 받은 문자열을 한 문자씩 비교하여 카운팅하는 문제이다.
이 때, 종료 조건을 적용해주지 않으면 오답으로 간주된다는 것을 주의하도록 한다.
0) 총 100번까지 반복 → 단, 입력 받는 문자열이 없을 시, 종료
1) 문자열 입력 받음: getline
2) 한 문자씩 비교하여 카운팅
2-1) 공백인지 확인
2-2) 숫자인지 확인: isdigit
2-3) 대문자인지 확인: isupper
2-4) 소문자로 확인
3) 카운팅 값 표출
#include <iostream>
#include <string>
using namespace std;
int main()
{
for (int i = 0; i < 100; i++)
{
string str;
getline(cin, str);
if (str.size() == 0)
break;
int cnt[4] = {0, 0, 0, 0}; // 소문자, 대문자, 숫자, 공백
for (char s : str)
{
if (s == ' ')
cnt[3]++;
else if (isdigit(s))
cnt[2]++;
else if (isupper(s))
cnt[1]++;
else
cnt[0]++;
}
cout << cnt[0] << " " << cnt[1] << " " << cnt[2] << " " << cnt[3] << "\n";
}
return 0;
}
- 메모리: 2024 KB
- 시간: 4 ms
- 코드 길이: 657 B
함수 isdigit 나 isupper 를 사용하지 않고 직접 비교해주는 방법도 있다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
char c;
int cnt[4] = {0, 0, 0, 0}; // 소문자, 대문자, 숫자, 공백
while (scanf("%c", &c) != EOF)
{
if (c == ' ')
cnt[3]++;
else if (c >= '0' && c <= '9')
cnt[2]++;
else if (c >= 'A' && c <= 'Z')
cnt[1]++;
else if (c >= 'a' && c <= 'z')
cnt[0]++;
else
{
cout << cnt[0] << " " << cnt[1] << " " << cnt[2] << " " << cnt[3] << "\n";
for (int& n : cnt)
n = 0;
}
}
return 0;
}
- 메모리: 2020 KB
- 시간: 0 ms
- 코드 길이: 619 B
이 외에도 문자열을 읽어오는 방법에는 다양한 방법들이 있다.
다른 사람들의 풀이를 참고하여 공부하도록 해보자.
728x90
'Algorithm > BackJoon' 카테고리의 다른 글
2559번: 수열 (0) | 2023.09.06 |
---|---|
1373번: 2진수 8진수 (0) | 2023.09.05 |
12789번: 도키도키 간식드리미 (0) | 2023.09.03 |
11659번: 구간 합 구하기 4 (0) | 2023.09.01 |
2851번: 슈퍼 마리오 (0) | 2023.08.31 |
댓글