Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 문자열에서 고유한 연도 개수 찾는 방법

이 튜토리얼에서는 문자열에 포함된 고유한 연도의 총 개수를 구하는 프로그램을 다룹니다.

주어진 문자열에는 'DD-MM-YYYY' 형식으로 작성된 날짜들이 포함되어 있습니다. 우리가 해야 할 작업은 이 문자열에서 언급된 서로 다른 연도의 개수를 세는 것입니다.

접근 방법

문자열을 한 글자씩 순회하면서 숫자인 경우 임시 문자열에 추가하고, 하이픈('-')을 만나면 임시 문자열을 초기화합니다. 임시 문자열의 길이가 4가 되면 이를 연도로 간주하여 unordered_set에 삽입합니다. 집합(set)은 중복을 허용하지 않으므로, 최종적으로 집합의 크기가 곧 고유한 연도의 개수가 됩니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;

// 문자열에서 언급된 고유한 연도 계산
int calculateDifferentYears(string str) {
    unordered_set<string> differentYears;
    string str2 = "";
    for (int i = 0; i < str.length(); i++) {
        if (isdigit(str[i])) {
            str2.push_back(str[i]);
        }
        if (str[i] == '-') {
            str2.clear();
        }
        if (str2.length() == 4) {
            differentYears.insert(str2);
            str2.clear();
        }
    }
    return differentYears.size();
}

int main() {
    string sentence = "I was born on 22-12-1955."
        "My sister was born on 34-06-2003 and my mother on 23-03-1940.";
    cout << calculateDifferentYears(sentence);
    return 0;
}

출력 결과

3

코드 설명

위 예제에서 문자열에는 세 개의 날짜(1955년, 2003년, 1940년)가 포함되어 있으며, 모두 서로 다른 연도이므로 결과값은 3이 출력됩니다.

이 알고리즘의 시간 복잡도는 O(N)입니다. 여기서 N은 문자열의 길이를 의미하며, 문자열을 한 번만 순회하면 되기 때문에 매우 효율적입니다. 공간 복잡도 역시 저장되는 연도의 개수에 비례하여 O(K)로 제한됩니다(K는 고유한 연도의 수).