ASCII 값은 ASCII 표준에 따라 문자를 정수로 나타낸 것입니다. 이번 문제에서는 하나의 문장이 주어졌을 때, 문장을 구성하는 각 단어별 ASCII 값의 합을 계산하는 방법을 알아보겠습니다.
문제 접근 방식
해결 방법은 다음과 같습니다.
먼저 문장을 한 글자씩 순회하면서 각 문자의 ASCII 값을 구합니다. 공백 문자를 만나기 전까지의 문자들의 ASCII 값을 모두 더하면 해당 단어의 합계가 됩니다. 이 과정을 모든 단어에 대해 반복하고, 마지막에는 각 단어의 합계를 모두 더하여 전체 총합을 구합니다.
예시
입력 문장: "I love tutorials point"
출력 결과
105 438 999 554 2096
위 결과를 보면 첫 번째 줄은 각 단어("I", "love", "tutorials", "point")의 ASCII 값 합계이며, 두 번째 줄인 2096은 네 단어 합계의 총합입니다.
C++ 구현 코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
long long int sumcalc(string str, vector<long long int>&arrsum) {
int l = str.length();
int sum = 0;
long long int bigSum = 0L;
for (int i = 0; i < l; i++) {
if (str[i] == ' ') {
bigSum += sum;
arrsum.push_back(sum);
sum = 0;
}
else
sum += str[i];
}
arrsum.push_back(sum);
bigSum += sum;
return bigSum;
}
int main() {
string str = "i love tutorials point";
vector<long long int>arrsum;
cout << "The string is " << str << endl;
long long int sum = sumcalc(str, arrsum);
cout << "Sum of ASCII values: ";
for (auto x : arrsum)
cout << x << " ";
cout << endl << "Total sum -> " << sum;
return 0;
}코드 설명
sumcalc 함수는 두 가지 역할을 수행합니다.
첫째, 문자열을 순회하면서 공백을 만날 때마다 지금까지 누적된 단어의 합계를 벡터(arrsum)에 저장합니다. 둘째, 각 단어의 합계를 bigSum 변수에 계속 누적하여 최종적으로 전체 총합을 반환합니다.
main 함수에서는 예시 문자열을 정의하고 sumcalc 함수를 호출한 뒤, 벡터에 저장된 각 단어별 합계와 전체 총합을 화면에 출력합니다.
실행 결과
The string is i love tutorials point Sum of ASCII values: 105 438 999 554 Total sum -> 2096
마무리
이 알고리즘의 시간 복잡도는 O(n)입니다. 여기서 n은 문장의 전체 문자 수를 의미하며, 문자열을 한 번만 순회하면 되기 때문에 매우 효율적입니다. 공간 복잡도 또한 단어 개수에 비례하는 수준으로 실용적입니다. 이러한 방식은 문자 처리나 데이터 인코딩 관련 문제에서 자주 활용되는 기본 패턴이므로 잘 익혀두면 유용합니다.