본문 바로가기
Algorithm/BackJoon

10820번: 문자열 분석

by 꼬부기가우는소리 2023. 9. 4.
728x90

 

- 문제 사이트: https://www.acmicpc.net/problem/10820

 

10820번: 문자열 분석

문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있

www.acmicpc.net

 

한 줄씩 입력 받고 입력 받은 문자열을 한 문자씩 비교하여 카운팅하는 문제이다.

이 때, 종료 조건을 적용해주지 않으면 오답으로 간주된다는 것을 주의하도록 한다.

 

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

 

이 외에도 문자열을 읽어오는 방법에는 다양한 방법들이 있다.

다른 사람들의 풀이를 참고하여 공부하도록 해보자.

'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

댓글