어떤 수가 특정 진법(base)으로 표현했을 때 연속된 0을 포함하는지 확인해야 하는 경우가 있습니다. 이를 위해 숫자와 진법을 매개변수로 받는 메서드를 정의하고, 내부적으로 다른 메서드를 호출하여 결과에 따라 'Yes' 또는 'No'를 반환하도록 구성할 수 있습니다.
아래는 이를 구현한 예제입니다.
예제 코드
def check_consecutive_zero(N, K):
my_result = convert_to_base(N, K)
if (check_n(my_result)):
print("Yes")
else:
print("No")
def convert_to_base(N, K):
weight = 1
s = 0
while (N != 0):
r = N % K
N = N//K
s = r * weight + s
weight*= 10
return s
def check_n(N):
res = False
while (N != 0):
r = N % 10
N = N//10
if (res == True and r == 0):
return False
if (r > 0):
res = False
continue
res = True
return True
N, K = 8, 2
print("Does the number have consecutive zeroes in the base ?")
check_consecutive_zero(N, K)출력 결과
Does the number have consecutive zeroes in the base ? No
코드 설명
check_consecutive_zero라는 이름의 메서드가 정의되며, 이 메서드는 숫자(N)와 진법(K)을 매개변수로 받습니다.convert_to_base메서드는 나눗셈과 나머지 연산을 반복하며 주어진 숫자를 지정한 진법의 수로 변환합니다.check_n메서드는 변환된 결과를 한 자리씩 검사하여 연속된 0이 존재하는지 여부를 판별합니다.검사 결과에 따라 연속된 0이 있으면 'No', 없으면 'Yes'가 출력됩니다.
예제에서는 N=8, K=2로 설정되어 있으며, 8을 2진수로 변환하면 1000이 되어 연속된 0이 존재하지만, 이 코드의 로직상 최종적으로 'No'가 출력됩니다.
N과 K 값을 전달하며
check_consecutive_zero메서드를 호출합니다.결과는 콘솔에 출력됩니다.
동작 원리 요약
이 알고리즘은 크게 세 단계로 동작합니다. 첫째, 대상 숫자를 지정된 진법으로 변환합니다. 둘째, 변환된 숫자의 각 자릿수를 오른쪽부터 하나씩 확인하며 직전 자릿수가 0이었고 현재 자릿수도 0이라면 연속된 0이 존재하는 것으로 판단합니다. 셋째, 판별 결과를 바탕으로 최종 답을 출력합니다. 이러한 방식은 진법 변환 로직과 자릿수 검사 로직을 분리했기 때문에 코드의 가독성과 재사용성이 높다는 장점이 있습니다.