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

C++에서 영어 알파벳과 같은 위치의 문자 개수 계산하기

개요

대문자와 소문자를 모두 포함하는 임의의 길이의 문자열이 주어졌을 때, 그중 영어 알파벳과 같은 위치에 있는 문자의 개수를 계산하는 것이 이번 문제의 목표입니다.

예시

입력 − String str = eBGD
출력 − Count is: 2

설명 − B는 알파벳에서 두 번째, D는 네 번째 위치에 오는 문자이므로 B와 D가 원래 알파벳과 같은 순서로 배치되어 있습니다.

입력 − String str = Abcdeizxy
출력 − Count is: 5

설명 − A가 첫 번째 위치에 있고 그 뒤로 B, C, D, E가 차례로 이어지므로 A, B, C, D, E 다섯 개의 문자가 알파벳과 같은 위치에 있습니다.

해결 접근 방법

  • 대문자와 소문자로 구성된 문자열을 입력받습니다.
  • size() 함수로 구할 수 있는 문자열 길이만큼 인덱스 0부터 반복문을 실행합니다.
  • 문자열에 대문자와 소문자가 모두 포함되어 있으므로 i == (str[i] - 'a') 또는 i == (str[i] - 'A') 조건을 검사합니다.
  • 반복문 밖에서 0으로 초기화한 카운터 변수(예: res)를 선언하고, 조건을 만족할 때마다 반복문 내부에서 1씩 증가시킵니다.
  • 반복이 끝나면 변수에 누적된 값을 반환합니다.
  • 최종 결과를 출력합니다.

예제 코드

#include<iostream>
using namespace std;
int countalphabet(string str){
    int res= 0;
    // 문자열을 처음부터 끝까지 순회합니다
    for (int i = 0 ; i < str.size(); i++){
        // 대문자끼리, 소문자끼리 각각 연속된 코드 값을 가지므로
        // 기준 문자와의 차이가 같다면 같은 알파벳 위치입니다
        if (i == (str[i] - 'a') || i == (str[i] - 'A')){
            res++;
        }
    }
    return res;
}
// main 함수
int main(){
    string str = "aBTutorIalspOiNT";
    cout << "Count is:" << countalphabet(str);
    return 0;
}

동작 원리

이 풀이의 핵심은 아스키(ASCII) 코드 값입니다. 소문자 'a'는 아스키 코드 97, 대문자 'A'는 65이며, 같은 계열의 문자들은 연속된 코드 값을 가집니다. 따라서 str[i] - 'a'는 현재 문자가 소문자 기준으로 몇 번째 알파벳인지, str[i] - 'A'는 대문자 기준으로 몇 번째인지를 나타냅니다. 이 값이 인덱스 i와 일치하면 해당 문자가 알파벳상 같은 위치에 있다는 의미입니다.

복잡도 분석

문자열을 한 번만 순회하므로 시간 복잡도는 O(n)이고, 추가적인 메모리를 거의 사용하지 않으므로 공간 복잡도는 O(1)입니다.

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Count is: 2