문제 개요
프로그래밍 초보자에게 유용한 연습 문제 중 하나는 숫자 하나(digit)를 해당하는 영어 단어로 변환하는 것입니다. 예를 들어 입력값이 9라면 출력은 "Nine"이 되어야 하고, 입력값이 3이라면 "Three"가 출력되어야 합니다.
만약 0부터 9 범위를 벗어난 값(예: 음수나 두 자리 이상의 숫자)이 입력된다면, 프로그램은 적절한 안내 메시지를 반환해야 합니다.
해결 접근 방식
이 문제는 조건문(if-else)을 사용하여 해결할 수 있습니다. 핵심 로직은 다음과 같습니다.
- 변환 함수
solve()를 정의하고, 매개변수로 숫자 d를 전달받습니다. - 먼저 d가 0 미만이거나 9보다 큰지 검사합니다. 범위를 벗어났다면 "Beyond range of 0 - 9"라는 메시지를 출력합니다.
- 범위 내의 값이라면, 각 숫자(0~9)에 대응하는 영어 단어를 차례대로 비교하여 일치하는 단어를 출력합니다.
C++ 구현 코드
아래는 위 로직을 실제로 구현한 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 d;
cin >> d;
solve(d);
return 0;
}실행 결과 확인
입력값으로 3을 넣어보겠습니다.
입력:
3
출력:
Three
입력값이 3일 때 프로그램이 정확히 "Three"를 출력하는 것을 확인할 수 있습니다. 만약 15나 -2처럼 범위를 벗어난 값을 입력하면 "Beyond range of 0 - 9" 메시지가 출력됩니다.
코드 설명 및 주요 포인트
- 범위 검사가 최우선:
d < 0 || d > 9조건을 가장 먼저 확인하여 잘못된 입력을 걸러냅니다. 여기서 논리 OR 연산자(||)를 사용해야 두 조건 중 하나라도 만족할 때 올바르게 처리됩니다. - else-if 체인: 각 조건은 순차적으로 평가되며, 하나의 조건이 참이 되면 나머지는 건너뛰므로 효율적입니다.
- 함수 분리: 변환 로직을
solve()함수로 분리하면 코드의 가독성과 재사용성이 높아집니다.
참고: switch 문을 활용한 대안
같은 로직은 switch 문으로도 더 깔끔하게 작성할 수 있습니다.
void solve(int d){
if(d < 0 || d > 9){
cout << "Beyond range of 0 - 9";
return;
}
switch(d){
case 0: cout << "Zero"; break;
case 1: cout << "One"; break;
case 2: cout << "Two"; break;
case 3: cout << "Three"; break;
case 4: cout << "Four"; break;
case 5: cout << "Five"; break;
case 6: cout << "Six"; break;
case 7: cout << "Seven"; break;
case 8: cout << "Eight"; break;
case 9: cout << "Nine"; break;
}
}두 방식 모두 동일한 결과를 제공하지만, 값이 많아질수록 switch 문이 더 읽기 쉬운 경우가 많습니다. 조건문의 기본 원리를 익히는 데는 if-else 체인 방식이 좋은 출발점입니다.