이 프로그램에서는 한 사람의 이름을 나타내는 문자열 name이 주어집니다. 우리의 목표는 C++을 사용하여 이름의 이니셜(첫 글자)을 찾아내는 프로그램을 작성하는 것입니다.
문제 설명
주어진 문자열 형태의 이름에서 각 단어의 첫 글자, 즉 이니셜을 추출하여 출력해야 합니다.
예제로 문제 이해하기
입력
name = "ram kisan saraswat"
출력
R K S
설명
이름을 구성하는 각 단어의 첫 번째 문자를 찾아 대문자로 변환하면 됩니다. 'ram'의 'R', 'kisan'의 'K', 'saraswat'의 'S'가 이니셜이 됩니다.
해결 접근 방법
이 문제의 가장 간단한 해결 방법은 이름 문자열을 처음부터 끝까지 순회(traverse)하는 것입니다. 탐색 과정에서 다음 규칙을 적용합니다.
- 문자열의 첫 번째 문자는 항상 이니셜이므로 대문자로 변환하여 출력합니다.
- 공백 문자(' ') 또는 줄바꿈 문자('\n') 바로 뒤에 오는 문자도 새로운 단어의 시작이므로 이니셜에 해당합니다.
- 모든 이니셜은 대문자로 변환하여 출력합니다.
C++ 구현 코드
위 접근 방식을 실제로 구현한 프로그램은 다음과 같습니다.
예제 코드
#include <iostream>
using namespace std;
void findNameInitials(const string& name) {
cout << (char)toupper(name[0]);
for (int i = 0; i < name.length() - 1; i++)
if (name[i] == ' ' || name[i] == '\n')
cout << " " << (char)toupper(name[i + 1]);
}
int main() {
string name = "ram kisan\nsaraswat";
cout << "The initials of the name are ";
findNameInitials(name);
return 0;
}실행 결과
The initials of the name are R K S
코드 동작 원리
findNameInitials 함수는 먼저 문자열의 첫 글자를 toupper() 함수로 대문자화하여 출력합니다. 이후 반복문을 통해 문자열을 순회하면서 공백이나 줄바꿈 문자를 만나면, 그 다음 위치의 문자를 대문자로 변환하여 출력합니다. 이 방식은 시간 복잡도 O(n)으로 매우 효율적이며, 공백과 줄바꿈이 섞여 있는 입력도 정확하게 처리할 수 있습니다.