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

C++ 문자열에서 가장 짧은 단어와 가장 긴 단어 찾는 방법

문제 개요

이 문제에서는 하나의 문자열 str이 주어지며, 우리의 과제는 C++에서 문자열 내 가장 짧은 단어와 가장 긴 단어를 찾는 프로그램을 작성하는 것입니다.

문제 설명

주어진 문자열에 포함된 모든 단어 중에서 길이가 가장 짧은 단어와 가장 긴 단어를 각각 찾아야 합니다. 여기서 단어는 공백 문자(' ') 또는 널 문자('\0')를 기준으로 구분됩니다.

예시로 문제 이해하기

입력

str = "Learn Programming at TutorialsPoint"

출력

smallest word = at
largest word = Tutorialspoint

해결 접근 방식

가장 짧은 단어와 가장 긴 단어를 찾으려면 두 개의 인덱스를 사용해 각 단어의 길이를 계산합니다. 첫 번째 인덱스는 단어의 시작 위치를, 두 번째 인덱스는 공백(' ') 또는 '\0' 문자로 표시되는 단어의 끝 위치를 가리킵니다.

구체적인 알고리즘은 다음과 같습니다.

  • 두 인덱스(시작, 끝)를 사용해 현재 단어의 길이를 구합니다.
  • 현재 단어의 길이가 기존의 최소 길이(minLength)보다 작으면 해당 단어를 smallestWord로 갱신합니다.
  • 현재 단어의 길이가 기존의 최대 길이(maxLength)보다 크면 해당 단어를 largestWord로 갱신합니다.
  • 문자열 끝까지 위 과정을 반복한 뒤 결과를 출력합니다.

C++ 구현 예제

아래 프로그램은 위에서 설명한 솔루션의 실제 동작을 보여줍니다.

예제 코드

#include<iostream>
#include<cstring>
using namespace std;
void minMaxLengthWords(string str){
    int StrLength = str.length();
    int startIndex = 0, endIndex = 0;
    int minLength = StrLength, maxLength = 0, currentLength;
    string smallest, largest;
    while (endIndex <= StrLength){
        if (str[endIndex] != '\0' && str[endIndex] != ' ')
            endIndex++;
        else{
            currentLength = endIndex - startIndex;
            if (currentLength < minLength){
                smallest = str.substr(startIndex, currentLength);
                minLength = currentLength;
            }
            if (currentLength > maxLength){
                largest = str.substr(startIndex, currentLength);
                maxLength = currentLength;
            }
            endIndex++;
            startIndex = endIndex;
        }
    }
    cout<<"가장 짧은 단어: "<<smallest<<"\n";
    cout<<"가장 긴 단어: "<<largest;
}
int main() {
    string a = "Learn Programming at TutorialsPoint";
    minMaxLengthWords(a);
}

실행 결과

가장 짧은 단어: at
가장 긴 단어: TutorialsPoint

코드 설명

이 프로그램은 문자열을 한 번만 순회하면서(시간 복잡도 O(n)) 각 단어의 경계를 탐색합니다. 공백이나 '\0' 문자를 만날 때마다 시작 인덱스부터 끝 인덱스까지의 거리를 계산해 현재 단어의 길이를 구하고, 이를 최소·최대 길이와 비교하여 조건에 맞으면 substr() 함수로 해당 단어를 추출해 저장합니다.

참고로 원본 예제 코드에는 마지막 출력 문에서 가장 긴 단어를 출력하면서도 "Smallest Word"라는 문구를 사용하는 오타가 있었는데, 위 코드에서는 이를 수정하여 정확한 결과를 출력하도록 개선했습니다.