문제 정의
주어진 정수에 포함된 모든 0(영)을 1로 바꾸는 프로그램을 작성하는 것이 목표입니다.
정수 하나가 입력으로 주어지면, 그 숫자 안에 있는 모든 0을 1로 교체한 결과를 출력해야 합니다.
문제 이해하기
예시를 통해 살펴보겠습니다.
입력이 102410이라면 출력은 112411이 됩니다. 숫자 내의 모든 0 자리가 1로 변경된 것을 확인할 수 있습니다.
알고리즘
정수 내의 모든 0을 1로 바꾸기 위해 아래 알고리즘을 따릅니다.
1단계 − 사용자로부터 정수를 입력받습니다.
2단계 − 정수를 한 자리씩 순회하며 검사합니다.
3단계 − '0'을 만나면 '1'로 교체합니다.
4단계 − 변환된 정수를 출력합니다.
C 프로그램 예제
다음은 주어진 정수에서 모든 0을 1로 바꾸는 C 프로그램입니다.
#include<stdio.h>
int replace(long int number){
if (number == 0)
return 0;
// 마지막 자릿수를 확인하고 필요하면 변경
int digit = number % 10;
if (digit == 0)
digit = 1;
// 나머지 자릿수를 재귀적으로 변환한 뒤 마지막 자릿수와 결합
return replace(number/10) * 10 + digit;
}
int Convert(long int number){
if (number == 0)
return 1;
else
return replace(number);
}
int main(){
long int number;
printf("\nEnter any number : ");
scanf("%ld", &number);
printf("\nAfter replacement the number is : %ld\n", Convert(number));
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Enter any number: 1056110010
After replacement the number is: 1156111111
코드 동작 원리
이 프로그램은 재귀(recursion) 방식으로 동작합니다.
replace 함수: number % 10으로 가장 마지막 자릿수를 추출합니다. 추출한 자릿수가 0이면 1로 바꾼 뒤, replace(number / 10)을 호출해 앞자리 숫자들을 먼저 변환하고, 그 결과에 10을 곱해 변환된 마지막 자릿수를 이어 붙입니다. 이 과정이 반복되면서 모든 자릿수가 처리됩니다.
Convert 함수: 입력값이 0인 경우를 별도로 처리합니다. 재귀 함수의 기본 종료 조건상 0이 입력되면 0을 반환하게 되므로, 이 경우 1을 반환하도록 예외 처리를 두었습니다.
main 함수: 사용자로부터 숫자를 입력받아 Convert 함수를 호출하고, 변환된 결과를 화면에 출력합니다.
참고로, long int 타입 변수를 다룰 때는 서식 지정자로 %ld를 사용해야 올바르게 입출력됩니다.