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

C++로 주어진 범위의 모든 숫자를 영어 단어로 변환하는 방법

문제 개요

두 개의 정수 a와 b가 주어졌을 때, a부터 b까지 범위에 속한 모든 숫자를 하나씩 영어 단어로 변환하여 출력하는 프로그램을 작성해야 합니다. 여기서 '숫자를 단어로 출력한다'는 것은, 예를 들어 숫자 5가 입력되면 "Five"라는 문자열을 출력해야 한다는 의미입니다.

예를 들어 입력이 a = 2, b = 6이라면 다음과 같은 결과가 출력되어야 합니다.

Two
Three
Four
Five
Six

문제 해결 접근 방법

이 문제는 조건문(if-else)을 활용하면 간단하게 해결할 수 있습니다. 알고리즘의 핵심 단계는 다음과 같습니다.

  • 숫자 d가 0보다 작거나 9보다 크면 "Beyond range of 0 - 9"(범위 초과) 메시지를 출력합니다.
  • d가 0이면 "Zero", 1이면 "One", 2이면 "Two"처럼 각 숫자에 해당하는 영어 단어를 순차적으로 비교하여 출력합니다.
  • d가 9이면 "Nine"을 출력합니다.
  • 메인 함수에서는 a부터 b까지 반복문을 실행하며, 각 숫자마다 변환 함수를 호출한 뒤 줄바꿈을 수행합니다.

예제 코드

아래는 위 알고리즘을 C++로 구현한 전체 코드입니다.

#include <iostream>
using namespace std;

void solve(int d){
    if(d < 0 || d > 9){
        cout << "Beyond range of 0 - 9";
    }else if(d == 0){
        cout << "Zero";
    }else if(d == 1){
        cout << "One";
    }else if(d == 2){
        cout << "Two";
    }else if(d == 3){
        cout << "Three";
    }else if(d == 4){
        cout << "Four";
    }else if(d == 5){
        cout << "Five";
    }else if(d == 6){
        cout << "Six";
    }else if(d == 7){
        cout << "Seven";
    }else if(d == 8){
        cout << "Eight";
    }else if(d == 9){
        cout << "Nine";
    }
}

int main(){
    int a = 2, b = 6;
    for(int i = a; i <= b; i++){
        solve(i);
        cout << endl;
    }
}

입력 및 출력 결과

입력:

a = 2, b = 6

출력:

Two
Three
Four
Five
Six

개선된 구현: 배열 활용하기

긴 조건문 체인 대신 문자열 배열을 활용하면 코드를 훨씬 간결하게 만들 수 있습니다. 배열의 인덱스가 곧 숫자 값과 일치하므로, 별도의 분기 없이 한 줄로 처리할 수 있습니다.

#include <iostream>
using namespace std;

void solve(int d){
    string words[] = {"Zero", "One", "Two", "Three", "Four",
                      "Five", "Six", "Seven", "Eight", "Nine"};
    if(d < 0 || d > 9){
        cout << "Beyond range of 0 - 9";
    }else{
        cout << words[d];
    }
}

int main(){
    int a = 2, b = 6;
    for(int i = a; i <= b; i++){
        solve(i);
        cout << endl;
    }
}

이 방식은 코드 가독성과 유지보수성 측면에서 더욱 효율적이며, 실무에서도 널리 권장되는 패턴입니다.

시간 복잡도

이 프로그램의 시간 복잡도는 O(b − a + 1)로, 범위 내 숫자의 개수에 비례합니다. 각 숫자를 단어로 변환하는 작업 자체는 상수 시간 O(1) 안에 수행됩니다.