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

C++로 주어진 숫자의 모든 0을 5로 바꾸는 프로그램 작성하기

정수 N이 주어졌을 때, 숫자에 포함된 모든 '0'을 '5'로 바꾸는 것이 목표입니다. 다만, 숫자 맨 앞에 위치한 선행(leading) '0'은 유효한 자릿수가 아니므로 그대로 유지되며 '5'로 대체할 수 없습니다.

입력 및 출력 예시

입력-1

N = 1007

출력

1557

설명 − 주어진 숫자에는 0이 두 개 포함되어 있으며, 이를 모두 '5'로 바꾸면 결과는 1557이 됩니다.

입력-2

N = 00105

출력

155

설명 − 주어진 숫자는 선행 '0'으로 시작하므로 해당 부분은 무시됩니다. 중간에 있는 0을 '5'로 바꾸면 최종 결과는 155가 됩니다.

문제 해결 접근 방법

주어진 숫자의 모든 0을 5로 바꾸려면 숫자의 마지막 자릿수를 하나씩 추출하면서 확인하면 됩니다. 추출한 마지막 자릿수가 '0'이라면 해당 값을 '5'로 변경하고, 남은 자릿수에 대해 동일한 과정을 반복합니다. 이때 숫자 앞에 있는 선행 '0'은 반드시 무시해야 합니다.

이 문제는 재귀(recursion) 방식으로 효율적으로 해결할 수 있습니다. 먼저 마지막 자릿수를 추출한 뒤, 같은 함수를 다시 호출하여 나머지 자릿수를 순차적으로 처리하는 구조입니다.

풀이 단계

  • 숫자 N을 입력받습니다.

  • 정수형 함수 convertToFive(int N)는 숫자를 입력받아 모든 0을 5로 바꾼 수정된 숫자를 반환합니다.

  • 기저 사례(base case): 숫자가 '0'이면 0을 반환하고, 그렇지 않으면 마지막 자릿수를 추출하여 검사합니다.

  • 마지막 자릿수가 '0'이면 해당 값을 '5'로 교체합니다.

  • 숫자를 10으로 나눈 값으로 재귀 함수를 호출한 뒤, 그 결과에 10을 곱하여 반환합니다.

  • 마지막 자릿수를 더한 최종 결과값을 반환합니다.

구현 예제

#include <bits/stdc++.h>
using namespace std;
int convertToFive(int N) {
    if(N==0){
        return 0;
    }
    int last_digit= N%10;
    if(last_digit==0)
        last_digit=5;
    return convertToFive(N/10)*10 +last_digit;
}
int main() {
    int N= 14006;
    cout << convertToFive(N) << endl;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

14556

주어진 숫자 14006에는 0이 두 개 포함되어 있습니다. 재귀 함수가 각 자릿수를 확인하며 0을 5로 교체하기 때문에, 최종적으로 14556이 출력됩니다.