숫자 n이 주어졌을 때, 홀수 자리에 있는 숫자들의 곱과 짝수 자리에 있는 숫자들의 곱이 서로 같은지 확인하는 문제를 파이썬으로 해결해 보겠습니다.
예를 들어 입력값이 n = 2364라고 가정해 봅시다. 이 경우 홀수 자리 숫자들의 곱은 2 × 6 = 12이고, 짝수 자리 숫자들의 곱은 3 × 4 = 12입니다. 두 곱이 동일하므로 결과는 True가 됩니다.
문제 해결 접근 방식
이 문제는 다음 단계를 따라 해결할 수 있습니다.
- 숫자가 10보다 작으면 자릿수가 하나뿐이므로
False를 반환합니다. - 홀수 자리 곱(odd_place)과 짝수 자리 곱(even_place)을 각각 1로 초기화합니다.
- 숫자가 0보다 큰 동안 반복합니다.
- 마지막 자릿수를 구해 odd_place에 곱한 뒤, 숫자를 10으로 나눕니다.
- 숫자가 0이 되면 반복을 종료합니다.
- 다시 마지막 자릿수를 구해 even_place에 곱한 뒤, 숫자를 10으로 나눕니다.
- 반복이 끝난 후 두 곱이 같으면
True, 다르면False를 반환합니다.
파이썬 구현 코드
아래 예제 코드를 통해 더 쉽게 이해할 수 있습니다.
def solve(num):
if num < 10:
return False
odd_place = 1
even_place = 1
while num > 0:
d = num % 10
odd_place *= d
num = num // 10
if num == 0:
break
d = num % 10
even_place *= d
num = num // 10
if odd_place == even_place:
return True
return False
num = 2364
print(solve(num))입력
2364
출력
True
코드 설명
위 코드는 숫자를 오른쪽부터 한 자리씩 처리하면서 번갈아 가며 홀수 자리 곱과 짝수 자리 곱을 계산합니다. 나머지 연산(% 10)으로 마지막 자릿수를 추출하고, 정수 나눗셈(// 10)으로 이미 처리한 자릿수를 제거하는 방식입니다. 시간 복잡도는 자릿수에 비례하여 O(log n)이므로 매우 효율적입니다.