정수 N이 주어졌을 때, 숫자 안에 포함된 모든 0을 '5'로 바꾸는 것이 목표입니다. 단, 맨 앞에 붙은 선행 0은 유효한 자릿수가 아니므로 변경 대상에서 제외하고 그대로 무시합니다.
문제 예시
입력 예제 1
N = 1007
출력:
1557
설명: 주어진 숫자에는 0이 두 개 있으며, 이를 모두 '5'로 바꾸면 결과는 1557이 됩니다.
입력 예제 2
N = 00105
출력:
155
설명: 맨 앞의 선행 0은 무시되고, 중간에 있는 0만 '5'로 바뀌어 최종 결과는 155가 됩니다.
문제 해결 접근 방법
숫자의 모든 0을 5로 바꾸려면 각 자릿수를 하나씩 확인하면서 0인 자리를 찾아내면 됩니다. 구체적인 절차는 다음과 같습니다.
- 숫자 N을 입력받습니다.
- convertToFive 함수는 숫자를 입력받아 모든 0을 5로 바꾼 뒤 수정된 숫자를 반환합니다.
- 숫자를 10으로 나눈 나머지를 이용해 일의 자리부터 한 자리씩 확인하며, 해당 자릿수가 0이면 자리 가중치(place value)에 5를 곱한 값을 결과에 더합니다.
- 숫자를 10으로 나누어 다음 자릿수로 이동하고, 자리 가중치는 10씩 곱해 늘립니다.
- 모든 자릿수를 확인한 후 계산된 추가 값을 원래 숫자에 더해 최종 결과를 반환합니다.
구현 예제
def convert_to_five(number):
return number + calculate_added_value(number)
def calculate_added_value(number):
result = 0
place_value = 1
# 입력값이 0인 경우 처리
if number == 0:
result += 5 * place_value
while number > 0:
# 일의 자리부터 확인하며 0이면 해당 자리에 5 더하기
if number % 10 == 0:
result += 5 * place_value
number //= 10
place_value *= 10
return result
print(convert_to_five(14006))
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
14556
주어진 숫자 14006에는 0이 두 개 있으므로, 이를 모두 5로 바꾸면 14556이 됩니다.
대안: 문자열 치환 활용하기
파이썬에서는 문자열의 replace 메서드를 활용하면 훨씬 간결하게 같은 결과를 얻을 수 있습니다.
def convert_to_five(number):
return int(str(number).replace('0', '5'))
print(convert_to_five(14006)) # 14556
숫자를 문자열로 변환한 뒤 '0'을 '5'로 치환하고 다시 정수형으로 변환하는 방식입니다. 값이 정수로 처리되는 경우 선행 0은 애초에 존재하지 않으므로, 문제의 조건도 자연스럽게 만족합니다.