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

C++로 이름의 성별(남성/여성) 판별하기


배열 input에 n개의 문자열이 주어져 있다고 가정해 보겠습니다. 이 문자열들은 사람의 이름이며, 각 이름이 남성 이름인지 여성 이름인지 판별해야 합니다. 판별 기준은 간단합니다. 이름이 'a', 'e', 'i', 'y' 중 하나로 끝난다면 여성 이름으로 간주하고, 그 외의 경우에는 남성 이름으로 판단합니다. 각 입력에 대해 그 결과를 순서대로 출력하면 됩니다.

예를 들어 입력이 n = 5, input = {"Lily", "Rajib", "Thomas", "Riley", "Chloe"}라고 한다면, 각 이름의 마지막 글자를 확인한 결과 출력은 Female, Male, Male, Female, Female이 됩니다.

문제 해결 접근 방법

이 문제는 다음과 같은 단계를 따라 해결할 수 있습니다.

  • 배열의 각 이름을 하나씩 순회합니다.
  • 현재 이름의 길이를 구하고, 마지막 문자가 무엇인지 확인합니다.
  • 마지막 문자가 'a', 'e', 'i', 'y' 중 하나라면 "Female"을 출력합니다.
  • 그렇지 않다면 "Male"을 출력합니다.
for initialize i := 0, when i < n, update (increase i by 1), do:
    s := input[i]
    l := size of s
    if s[l - 1] is same as 'a' or s[l - 1] is same as 'e' or s[l - 1] is same as 'i' or s[l - 1] is same as 'y', then:
        print("Female")
    Otherwise,
        print("Male")

C++ 구현 예제

아래의 실제 C++ 코드 구현을 통해 동작 방식을 더 자세히 이해해 보겠습니다.

#include <bits/stdc++.h>
using namespace std;
#define N 100
void solve(int n, string input[]) {
    for(int i = 0; i < n; i++) {
        string s = input[i];
        int l = s.size();
        if (s[l - 1] == 'a' || s[l - 1] == 'e' || s[l - 1] == 'i' || s[l - 1] == 'y')
            cout<< "Female" << endl;
        else
            cout << "Male" << endl;
    }
}
int main() {
    int n = 5;
    string input[] = {"Lily", "Rajib", "Thomas", "Riley", "Chloe"};
    solve(n, input);
    return 0;
}

입력

5, {"Lily", "Rajib", "Thomas", "Riley", "Chloe"}

출력

Female
Male
Male
Female
Female

코드 설명

solve 함수는 배열에 담긴 이름의 개수(n)와 이름 배열(input)을 매개변수로 받습니다. 반복문을 통해 각 이름을 순서대로 확인하며, s.size()로 이름의 길이를 구한 뒤 마지막 문자 s[l - 1]이 조건에 해당하는지 검사합니다. 조건을 만족하면 "Female"을, 만족하지 않으면 "Male"을 출력합니다. 시간 복잡도는 이름의 개수에 비례하는 O(n)으로 매우 효율적입니다.