- Reference
- 이 문제도 튜플 문제처럼 “무엇을 기준으로 나눌 것인가”를 꼭 먼저 생각해야 된다. 내가 풀었던 방법으로는 테스트 케이스가 4개 정도 맞지 않았다.
- 공백을 제거하는 방법 중 가장 좋은 것이 filter 메서드라고 GPT-4가 말해주길래 앞으로 이런 방법으로 쓰려 한다.
Solution
import math
def solution(n, k):
count_answer = 0
# 10진수(n) to k진법
tmp = ''
while n:
tmp += str(n % k)
n = n // k
number = tmp[::-1]
# '0'을 기준으로 하여 분리
number_split = number.split('0')
number_delete_blank = filter(lambda x: x != '', number_split)
# '0'에 따른 조건 적용
for num in number_delete_blank:
if is_prime(int(num)):
count_answer += 1
# number(변환된 수)를 가지고 조건 비교
# i + 1번째에서 0을 발견하면 0을 마지막으로 발견한 시점부터 i번째까지의 숫자를 가지고 비교 -> is_prime()
# tmp_i = ''
# is_zero = False
# for i in range(len(number)):
# # '0'을 split -> 빈칸 제거
# tmp_i += number[i]
# if len(number) - 1 == i:
# if number[i - 1] == '0':
# is_zero = True
# else:
# if number[i + 1] == '0' or number[i - 1] == '0':
# is_zero = True
#
# if is_prime(int(tmp_i)) and is_zero:
# # 여기서 좌우 0인지 비교
# if '0' not in tmp_i: # 여기서 101 같은 건 count 해주지 말기
# count_answer += 1
# tmp_i = ''
return count_answer
def is_prime(n):
if n == 1:
return False
# 더 빠르게 소수 구하는 알고리즘
for i in range(2, int(math.sqrt(n) + 1)):
if n % i == 0:
return False
return True
# for i in range(2, n):
# if n % i == 0:
# return False
#
# return True
print(solution(437674, 3))
print(solution(110011, 10))
Leave a comment