문제 개요
두 개의 정수 a와 b가 주어졌다고 가정해 봅시다. 이때 a부터 b까지의 각 숫자를 영단어로 변환하여 하나씩 출력해야 합니다. 여기서 '숫자를 단어로 출력한다'는 것은, 예를 들어 숫자 5가 입력되면 "Five"라는 문자열을 출력한다는 의미입니다.
입력이 a = 3, b = 8이라면 프로그램의 출력 결과는 다음과 같습니다.
- Three
- Four
- Five
- Six
- Seven
- Eight
해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
먼저 정수 d를 매개변수로 받는 solve() 함수를 정의합니다.
- d가 0보다 작거나 9보다 크면 "Beyond range of 0 - 9"(범위 초과) 메시지를 출력합니다.
- d가 0이면 "Zero", 1이면 "One", 2이면 "Two"처럼 값에 대응하는 영단어를 출력합니다.
- 이 과정을 d가 9일 때의 "Nine"까지 반복합니다.
그다음 main 함수에서는 다음 작업을 수행합니다.
- a부터 b까지 반복하는 for 루프를 실행합니다.
- 루프의 각 반복마다 solve(i)를 호출한 뒤 줄바꿈 문자를 출력해 결과를 한 줄씩 구분합니다.
예제 코드
아래 구현 예제를 통해 더 쉽게 이해할 수 있습니다.
#include <stdio.h>
void solve(int d){
if(d < 0 || d > 9){
printf("Beyond range of 0 - 9");
}else if(d == 0){
printf("Zero");
}else if(d == 1){
printf("One");
}else if(d == 2){
printf("Two");
}else if(d == 3){
printf("Three");
}else if(d == 4){
printf("Four");
}else if(d == 5){
printf("Five");
}else if(d == 6){
printf("Six");
}else if(d == 7){
printf("Seven");
}else if(d == 8){
printf("Eight");
}else if(d == 9){
printf("Nine");
}
}
int main(){
int a = 3, b = 8;
for(int i = a; i <= b; i++){
solve(i);
printf("\n");
}
return 0;
}참고: 범위 검사 조건은 반드시 논리 OR 연산자(<code>||</code>)를 사용해야 합니다. 어떤 값도 동시에 0보다 작으면서 9보다 클 수는 없기 때문에 AND 연산자(<code>&&</code>)를 사용하면 해당 조건은 항상 거짓이 되어 범위 초과 검사가 동작하지 않습니다.
입력
3, 8
출력
Three Four Five Six Seven Eight
더 나은 방법: 배열 활용하기
if-else 분기를 일곱 번 이상 나열하는 대신, 문자열 포인터 배열을 사용하면 코드를 훨씬 간결하게 만들 수 있습니다.
#include <stdio.h>
void solve(int d){
const char *words[] = {"Zero", "One", "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight", "Nine"};
if(d < 0 || d > 9){
printf("Beyond range of 0 - 9");
}else{
printf("%s", words[d]);
}
}배열 인덱스가 곧 숫자 값과 일치하므로 복잡한 조건문 없이 한 줄로 변환이 가능하며, 유지보수성과 가독성 면에서도 크게 유리합니다.
마무리
이 예제는 for 루프와 함수, 조건문의 기본적인 조합을 연습하기에 좋은 소재입니다. 특히 범위 검사 시 논리 연산자 선택이 결과에 미치는 영향을 확인할 수 있어, 초보자에게 유용한 학습 예제가 됩니다.